代码之家  ›  专栏  ›  技术社区  ›  Sisiutl

如何获取实体框架类继承基类

  •  3
  • Sisiutl  · 技术社区  · 16 年前

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

    2 回复  |  直到 16 年前
        1
  •  5
  •   Andrew    16 年前

    对不起,如果你看到我以前的帖子——我错过了你问题中重要的东西。

    可以使用分部类。使分部类具有一个内部字段,其中包含所需的基类实例,并实现所有方法和属性(除非已在实体中实现这些方法和属性)。如果您尝试使用实体类,那么可以使用 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
  •  2
  •   CodingGorilla    16 年前

    如果您仍在使用Visual Studio 2008,我不确定您是否能够完成此操作(尽管有人请随时纠正我)。

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

    如果你仍然在VS2008中,你可能仍然可以做同样的事情,你只需要手工修改生成的CS文件(每次你改变你的模型),这是理所当然的将是可怕的。