【问题标题】:Simulating Multiple Table Inheritance in Linq-to-SQL在 Linq-to-SQL 中模拟多表继承
【发布时间】:2011-07-31 08:05:04
【问题描述】:

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

【问题讨论】:

  • Linq-to-Sql 不是 ORM,它只是负责翻译 SQL 中的 ExpressionTrees

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


【解决方案1】:

我认为 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
        }

    }

对于像“JOIN”这样的查询,我会考虑生成我自己的expression trees,如果我真的需要这个,因为这很快就会变得很棘手。 您在 hajirazinthis example 中看到的“左外连接”方法也可以放在 Person 类中“受保护”,并使用“客户”和其他孩子的正确值调用。

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

最好的问候,

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-19
    • 2011-01-08
    • 2012-05-29
    • 1970-01-01
    • 2010-09-09
    相关资源
    最近更新 更多