12

私はEF 5.0を使用してPOCOエンティティを生成し、それを別のデータアクセスレイヤーで使用しています

全てのエンティティにタグ付けしたい【連載可能】

Serializable 属性を追加するためにテンプレートを変更するには?

4

6 に答える 6

16

テンプレートを編集したくない場合は、別のコード ファイルで編集することもできます。これは、partialクラスの利便性のためです。したがって、ここのタイプがFooBarありBazMy.Namespace名前空間にある場合、同じプロジェクト内に別のファイルを作成できます。

using System;
namespace My.Namespace {
    [Serializable] partial class Foo {}
    [Serializable] partial class Bar {}
    [Serializable] partial class Baz {}
}

[Serializable]これは、属性を適用して、生成された半分とマージされます。partialまた、独自のメソッドを型に追加したり、テンプレートが宣言するメソッド実装の本体を提供したりすることもできます。

ただし、注意する必要があります。[Serializable]使用していることを示唆していますBinaryFormatter。これは必ずしも良い候補ではありません。コントラクトベースのシリアライザーを検討することをお勧めします。DataContractSerializerEFテンプレートに(具体的には[DataContract]/ )の属性を出力するオプションがまだなかったら、私は非常に驚かれることでしょう[DataMember]BinaryFormatterソフトウェアのバージョンを変更すると、非常に問題になる可能性があります。

于 2013-05-29T10:25:32.957 に答える
11

エンティティ フレームワーク 5.0 以降を使用する場合は、次のコードの間に [Serializable] タグを追加します。

<#=codeStringGenerator.UsingDirectives(inHeader: false)#>

[Serializable]

<#=codeStringGenerator.EntityClassOpening(entity)#>
于 2014-07-09T15:01:11.997 に答える
6

(少なくとも) EF 6 に対して行うことは次のとおりです。

model.tt ファイルで、次の行を探します。



    public string EntityClassOpening(EntityType entity)
    {
        return string.Format(
            CultureInfo.InvariantCulture,
            "{0} {1}partial class {2}{3}",
            Accessibility.ForType(entity),
            _code.SpaceAfter(_code.AbstractOption(entity)),
            _code.Escape(entity),
            _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType))
        );
    }

次のように変更します。



    public string EntityClassOpening(EntityType entity)
    {
        return string.Format(
            CultureInfo.InvariantCulture,
            "{0} " + Environment.NewLine + " {1} {2} partial class {3}{4}", 
            "[Serializable]", 
            Accessibility.ForType(entity),
            _code.SpaceAfter(_code.AbstractOption(entity)),
            _code.Escape(entity),
            _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType)));
    }

.tt ファイルを保存すると、エンティティ クラス ファイルが[Serializable]属性を取得します。終わり。

于 2016-09-30T14:39:38.430 に答える
6

そのための手順は次のとおりです。

1) ModelName.Entity.tt ファイルを開きます

2) このファイルで次の文字列を見つけます

<#=Accessibility.ForType(entity)

3) この行の上に [Serializable] と書くと、コードは次のようになります。

[Serializable] 
<#=Accessibility.ForType(entity)

ファイルを保存し、エンティティ ファイルを開くと、desire タグが書き込まれていることがわかります。エンティティを再度生成する必要さえありません。

于 2013-05-29T10:15:49.427 に答える
1

EF 6 の場合、.ttファイル内で次のコードを見つけてください。

public string EntityClassOpening(EntityType entity)
{
    return string.Format(
        CultureInfo.InvariantCulture,
        "{0} {1}partial class {2}{3}",
        Accessibility.ForType(entity),
        _code.SpaceAfter(_code.AbstractOption(entity)),
        _code.Escape(entity),
        _code.StringBefore(" : ", _typeMapper.GetTypeName(entity.BaseType))
    );
}

文字列プレースホルダーがあり、("{0} {1}partial class {2}{3}")必要なものに変更できます

于 2015-09-16T05:43:10.330 に答える