0

DataBase First アプローチを使用して Entity Framework によって生成されたデータ モデルがあります。この dataModel は WCF サービスにあり、複数のメソッドによってクライアントに返されます。クライアント アプリケーションでは、型CreationTypeはサービス参照で宣言されます (サービス参照を更新することにより)。

// This code was generated from a template.
[DataContract]
public partial class CreationType
{
    public CreationType()
    {
        this.Quotes = new HashSet<Quote>();
    }

    [DataMember]
    public int CreationTypeId { get; set; }
    [DataMember]
    public string Code { get; set; }
    [DataMember]
    public string NameFr { get; set; }
    [DataMember]
    public string NameEn { get; set; }
}

問題は、WCF 属性を失わずにモデルを再生成する方法はありますか? つまり、生成されていないファイルで宣言し、部分クラスなどのように生成されたファイルに適用できますか?

すべてのプロパティが DataMember である必要はなく、すべての EntityModel が DataContract である必要もありません。

4

1 に答える 1

1

これを実現するために、EF クラスが生成されるテンプレートを編集できます。T4 テンプレートを編集することで、EF クラス ジェネレーターの動作を制御できます。

ファイルを探している*.ttか、より具体的に:YourModelName.tt

このファイル内には、ルールと EF クラスが生成されていることがわかります。

変更する必要がある行は次のとおりです。

[DataContract]
<#=Accessibility.ForType(entity)#> <#=code.SpaceAfter(code.AbstractOption(entity))#>partial class <#=code.Escape(entity)#><#=code.StringBefore(" : ", code.Escape(entity.BaseType))#>

次の行は次のとおりです。

[DataMember]
<#=PropertyVirtualModifier(Accessibility.ForProperty(edmProperty))#> <#=code.Escape(edmProperty.TypeUsage)#> <#=code.Escape(edmProperty)#>

おそらく、次の行も追加する必要があります。

<#@ import namespace="System.Runtime.Serialization" #>

このセクションで:

<#@ import namespace="System.Text.RegularExpressions" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Diagnostics" #>
于 2016-07-04T12:09:06.237 に答える