.net 为WCF服务编辑自动生成的DMBL文件

.net 为WCF服务编辑自动生成的DMBL文件,.net,wcf,linq-to-sql,dbml,.net,Wcf,Linq To Sql,Dbml,在我们的项目中,我们有一个标准的自动生成的designer.cs文件,链接到一个DBML文件,其中包含映射到数据库表的所有对象类 我们希望通过WCF服务直接传递这些对象,所以它们需要在适当的地方使用[DataContract]和[DataMember]属性进行修饰。这样做的最佳方法是什么,以便在数据库方案更改或其他更改后重新生成designer.cs文件时,更改不会消失 分部类是一个选项,但如果要用DataMember属性修饰的属性已在自动生成的designer.cs文件中定义,则无法将相同的属

在我们的项目中,我们有一个标准的自动生成的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之前存在问题的引用

如果您也想要这些,请查看my,它提供了与SP1完全兼容的DataContract属性(在DataClasses.tt文件中取消对data.SerializationMode=DataContractSP1行的注释),并允许您自定义DBML到C#/VB.NET代码生成过程的任何其他部分