编辑用于WCF服务的自动生成的DMBL文件

时间:2020-03-06 14:21:40  来源:igfitidea点击:

在我们的项目中,我们有一个标准的自动生成的designer.cs文件,该文件链接到DBML文件,其中包含映射到数据库表的所有对象类。

我们希望将这些对象直接通过WCF服务传递,因此它们需要在适当的地方用[DataContract]和[DataMember]属性进行修饰。这样做的最佳方法是什么,以便在更改数据库方案或者进行其他更改时重新生成designer.cs文件时,更改不会被抹掉。

部分类是一个选项,但是如果要用DataMember属性装饰的属性已经在自动生成的designer.cs文件中定义,则我无法向部分类添加相同的属性定义,因为这意味着该属性已经定义两次。

解决方案

dbml文件提供了部分类,因此我们可以创建一个新的.cs文件,定义要扩展的部分类,然后使用所需的属性对其进行修饰。例如,如果我们生成的数据上下文看起来像

public partial class MyDataContext : System.Data.Linq.DataContext
{
...
}

我们可以在单独的.cs文件中定义以下内容:

[DataContract]
public partial class MyDataContext
{
...
}

这样,我们可以扩展生成的类,而不必担心在重新生成dbml文件时它们会被覆盖。

将DBML序列化模式设置为单向将装饰类和许多具有必需属性的成员,但是它将忽略某些关联,以避免在SP1之前出现循环引用。

如果我们也想要这些,请查看我的LINQ to SQL T4模板,该模板提供了与SP1完全兼容的DataContract属性(取消注释DataClasses.tt文件中的line data.SerializationMode = DataContractSP1),以及让我们将DBML的任何其他部分定制为C# /VB.NET代码生成过程。