Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取实体框架类继承基类_C#_Entity Framework_Inheritance - Fatal编程技术网

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

C# 如何获取实体框架类继承基类,c#,entity-framework,inheritance,C#,Entity Framework,Inheritance,我有几个类继承自一个抽象基类,该抽象基类包含一些公共实用程序代码。我想移动到EF进行数据访问,但我仍然希望对象继承基类中的公共代码。EF类已经从EntityObject继承,所以我不能让它们继承我的基类。正确的处理方法是什么? 我的环境是Net 3.5/C 如果您仍在使用Visual Studio 2008,我不确定您是否能够完成此任务(尽管有人请随时纠正我) 但是如果您使用的是VS2010,那么您可以使用新的T4模板选项(即使是针对.net 3.5)。我要做的是使基类从EntityObject

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

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

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


如果您仍然使用VS2008,您可能仍然可以执行相同的操作,您只需手动修改生成的CS文件(每次更改模型),这将非常糟糕。

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

可以使用分部类。使您的分部类具有一个内部字段,其中包含所需基类的实例,并实现所有方法和属性(除非它们已在实体中实现)。如果您试图允许使用实体类,则可以在基类(或部分实体类)中使用
公共静态隐式运算符
,以方便转换

如果您有一个名为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.
        };
    }
}

我的解决方案虽然有点枯燥,但在VS2008中也能工作,并且您不需要修改任何生成的代码。不过,谢谢你的提示——在VS2010中好多了@安德鲁:是的,这是一个非常有趣的方法。然而,如果您有一个包含100个实体的模型,那么“乏味”将是一种轻描淡写的说法。尽管如此,您也可以使用T4模板或CodeSmith模板来生成部分实体。