C# 自动向实体添加LinqToSql基类的方法?

C# 自动向实体添加LinqToSql基类的方法?,c#,linq-to-sql,C#,Linq To Sql,是否有一种自动向Linq2Sql实体添加基类的方法 我知道我可以定义一个分部并实现它,但必须有一种自动化的方法,对吗?在这种情况下,编辑:显然是正确的方法,但我把这个答案留给子孙后代——在某些情况下,这是一个方便的技巧,在这种情况下,您只需要一个分部类来更改类的继承/接口 我不知道有什么自动化的方法,但是如果你想为多个类做这件事,只想指定基类,你可以考虑只为部分类声明创建一个文件。我在协议缓冲区中使用这种方法,使自动生成的内部表示类实现特定接口 有关此示例,请参见代码。(忽略TODO—它在本地是

是否有一种自动向Linq2Sql实体添加基类的方法


我知道我可以定义一个分部并实现它,但必须有一种自动化的方法,对吗?

在这种情况下,编辑:显然是正确的方法,但我把这个答案留给子孙后代——在某些情况下,这是一个方便的技巧,在这种情况下,您只需要一个分部类来更改类的继承/接口

我不知道有什么自动化的方法,但是如果你想为多个类做这件事,只想指定基类,你可以考虑只为部分类声明创建一个文件。我在协议缓冲区中使用这种方法,使自动生成的内部表示类实现特定接口


有关此示例,请参见代码。(忽略TODO—它在本地是固定的,但我已经有一段时间没有推动了:)

有些人编写了自己的代码模板来代替DBML方法。按照这条路线,您可以自己轻松地添加基类


是一个很好的起点

LINQ to SQL代码生成器直接支持这一点

数据上下文的基类可以在设计器中设置为
基类
属性。或者,直接编辑dbml:右键单击“编辑方式…”,“XML编辑器”

要更改实体的基类,请设置类型:

<Database EntityBase="Some.NameSpace.Foo" ... > 
<Database BaseType="Some.NameSpace.Bar" ... >

要更改数据上下文的基类,请设置类型:

<Database EntityBase="Some.NameSpace.Foo" ... > 
<Database BaseType="Some.NameSpace.Bar" ... >

在这两种情况下,在属性中使用完全限定类型。瞧


请注意,因为它是非常文字化的,所以您也可以使用这种方法使您的实体实现一个接口—例如,当我的类具有类似于
lastdupdated
UpdatedBy
的属性时,我可能有一个定义这些属性的
IAuditable
接口。然后,我可以将代码放入数据上下文的
SubmitChanges
(override)中,该上下文调用
GetChangeSet()
,并为所有正在更新的
IAuditable
实体设置这些值;非常好。

“我知道我可以定义一个部分并实现它,但必须有一个自动化的方法,对吗?”-1,抱歉,Skeet,但那没有帮助。所以如果没有自动化的方法,你会投票否决所有人,即使他们仍然试图使你的代码更易于管理吗?是的,您知道如何创建自己的分部类-但您可能没有想到将它们全部放在一个文件中以避免源文件爆炸。不一定,您的答案特别糟糕,因为您提供的唯一附加信息是“您可以将多个类放在一个文件中”。为什么附加信息“特别糟糕”?在我看来,这是一种使代码更易于管理的有效方法——如果您真的愿意,编写一些东西来自动生成这样一个文件是很容易的,如果不是的话,保持最新也是很容易的。比多个小文件要简单得多。(尽管如此,如果您不想同时使用DBML,Todd建议的模板方法非常好。我只是指出了一种替代方法,如果您只想更改如何指定基类,那么您的生活会更轻松。)