到目前为止,每个人都知道Linq-to-SQL本身不支持多表继承(也称为table-per-subtype),并且您可以使用其他ORM框架,例如Entity Framework,NHibernate等。你想要多表继承的原生支持(如果你有任何疑问,请参考SO问题“Multiple Inheritance in LINQtoSQL”。)
但是,假设您确实想要使用(或仅限于使用)Linq-to-SQL作为您的ORM层,那么任何人都可以确定模拟多个简单直接的设计策略Linq-to-SQL项目中的表继承,以便可以使用自然的,面向对象的API针对Linq-to-SQL层编写客户端代码?
答案 0 :(得分:0)
我认为 Sam 得到了很好的答案: Linq2Sql 似乎无法做到这一点。 但只要您只是想模拟这种行为,我就会这样做:
/// <summary>
/// Declare POCO (Plain Old CLR Object) as you would to manipulate your inheritance
/// </summary>
public class Person
{
public abstract void Load();
public abstract void Save();
}
/// <summary>
/// Simulate a consistent behavior
/// </summary>
public class Customer : Person
{
public override void Load()
{
// - Do some Linq2Sql stuff
}
public override void Save()
{
// - Do some Linq2Sql stuff
}
}
对于像&#34; JOIN&#34;这样的查询,我会考虑生成我自己的expression trees,如果我真的需要这个,那么这会很快变得棘手。 &#34;左外连接&#34;您在this example中通过 hajirazin 看到的方法也可以被保护&#34;受保护&#34;在类Person中,使用&#34; Customer&#34;中的正确值调用和其他孩子。
总之,我认为所有工作都必须手动完成,以模拟对象中的请求。表达式树可以做任何事情,但很难确定。
致以最诚挚的问候,