在我们的项目中,我们有一个标准的自动生成的designer.cs文件,链接到DBML文件,其中包含映射到数据库表的所有对象类。
我们希望直接通过WCF服务传递这些对象,因此需要在适当的时候使用[DataContract]和[DataMember]属性进行装饰。执行此操作的最佳方法是什么,以便在更改数据库方案或其他更改时重新生成designer.cs文件时,更改不会被删除。
部分类是一个选项,但是如果我想用DataMember属性修饰的属性已经在自动生成的designer.cs文件中定义,那么我不能将相同的属性定义添加到分部类,因为这意味着属性将被定义两次。
答案 0 :(得分:3)
将DBML序列化模式设置为单向将装饰类和具有所需属性的许多成员,但是它将忽略一些关联以避免在SP1之前出现问题的循环引用。
如果你想要那些也检查我的LINQ to SQL T4 template提供完全SP1兼容的DataContract属性(取消注释DataClasses.tt文件中的行data.SerializationMode = DataContractSP1),以及让你自定义的任何其他部分DBML到C#/ VB.NET代码生成过程。
答案 1 :(得分:0)
dbml文件提供了部分类,因此您可以创建新的.cs文件,定义要扩展的部分类,然后使用所需的属性进行装饰。例如,如果您生成的数据上下文看起来像
public partial class MyDataContext : System.Data.Linq.DataContext
{
...
}
您可以在单独的.cs文件中定义以下内容:
[DataContract]
public partial class MyDataContext
{
...
}
这样,您可以扩展生成的类,而不必担心在重新生成dbml文件时它们会被覆盖。