重新生成EntityModel,它是DataContract

时间:2016-07-04 11:55:28

标签: c# entity-framework wcf entity-model

我有一个使用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。

1 个答案:

答案 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" #>