2016-07-04 3 views
0

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

// 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である必要はなく、DataContractであるすべてのEntityModelを必要としません。

答えて

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" #> 
+0

私はそれを行うことができましたが、この方法を使用することによってすべてのモデルがデータ契約になります。私はそれらのうちのいくつかだけを必要とし、DataMemberであるすべてのプロパティを必要とする必要はありません。 –

関連する問題