【问题标题】:How to get an Entity Framework class inherit a base class如何让实体框架类继承基类
【发布时间】:2010-09-17 18:56:59
【问题描述】:

我有几个类继承自包含一些通用实用程序代码的抽象基类。我想转移到 EF 进行数据访问,但我仍然希望对象继承基类中的公共代码。 EF 类已经从 EntityObject 继承,所以我不能让它们继承我的基类。处理这个问题的正确方法是什么? 我的环境是 Net 3.5/C#

【问题讨论】:

    标签: c# entity-framework inheritance


    【解决方案1】:

    抱歉,如果您看到了我之前的帖子,我错过了您问题中的一些重要内容。

    您可以使用部分类。使您的分部类有一个内部字段,其中包含您想要的基类实例并实现所有方法和属性(除非它们已经在实体中实现)。如果您尝试允许使用实体类,则可以在基类(或部分实体类)中使用public static implicit operator,以便轻松进行转换。

    如果您有一个名为 MyBaseClass 的抽象基类,您可以执行以下操作:

    public partial class MyEntityClass
    {
        private MyBaseClass _baseClass;
    
        private MyBaseClass BaseClass
        {
            get
            {
                if (_baseClass == null)
                {
                    _baseClass = new MyBaseClass();
                }
                return _baseClass;
            }
        }
    
        public string BaseClassString
        {
            get
            {
                return BaseClass.BaseClassString;
            }
            set
            {
                BaseClass.BaseClassString = value;
            }
        }
    
        // etc.
    
        public static implicit operator MyBaseClass(MyEntityClass e)
        {
            return new MyBaseClass() {
                Property1 = e.Property1,
                Property2 = e.Property2 // etc.
            };
        }
    
        public static implicit operator MyEntityClass(MyBaseClass b)
        {
            return new MyEntityClass() {
                Property1 = b.Property1,
                Property2 = b.Property2 // etc.
            };
        }
    }
    

    【讨论】:

      【解决方案2】:

      如果您仍在使用 Visual Studio 2008,我不确定您是否能够做到这一点(尽管有人请随时纠正我)。

      但是,如果您使用的是 VS2010,那么您可以使用新的 T4 模板选项(即使针对 .net 3.5)。我要做的就是让你的基类继承 EntityObject 类,然后修改用于生成要从你的基类继承的类的 t4 模板。

      如果您还在 VS2008 中,您可能仍然可以做同样的事情,您只需要手动修改生成的 CS 文件(每次更改模型时),这将是可怕的。

      【讨论】:

      • 我的解决方案虽然有点乏味,但在 VS2008 中确实有效,您无需更改任何生成的代码。不过,感谢您的提示——在 VS2010 中好多了!
      • @Andrew:是的,这是一种非常有趣的方法。但是,如果您有一个包含 100 个实体的模型,那么单调乏味将是轻描淡写的。不过,您也可以使用 T4 模板或 CodeSmith 模板来生成部分实体。
      猜你喜欢
      • 1970-01-01
      • 2016-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-19
      • 2010-10-07
      • 1970-01-01
      相关资源
      最近更新 更多