我有一个使用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。
答案 0 :(得分: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" #>