在Linq-to-SQL中模拟多表继承

时间:2011-04-07 03:11:18

标签: .net linq-to-sql multiple-inheritance

到目前为止,每个人都知道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层编写客户端代码?

1 个答案:

答案 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;中的正确值调用和其他孩子。

总之,我认为所有工作都必须手动完成,以模拟对象中的请求。表达式树可以做任何事情,但很难确定。

致以最诚挚的问候,