Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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#_.net_Entity Framework - Fatal编程技术网

C# 派生自动生成的实体类

C# 派生自动生成的实体类,c#,.net,entity-framework,C#,.net,Entity Framework,我将edmx文件的代码生成策略设置为None,并将T4模板设置为该文件,在该文件中我删除了工厂方法创建逻辑。我通过分部类为单独文件中的几个实体引入了一些附加方法 例如:我已经为部分类中的实体User介绍了一些方法,并且我从User派生了类Admin和Person,我想在这里介绍一些其他方法 我在这里面临的问题是,在为Admin的导航属性赋值时,它引发异常对于标识为“CivilRegistry.ControlledModel.Admin”的类型找不到对象映射。 用户类别: public parti

我将
edmx
文件的
代码生成策略设置为
None
,并将T4模板设置为该文件,在该文件中我删除了工厂方法创建逻辑。我通过分部类为单独文件中的几个实体引入了一些附加方法

例如:我已经为部分类中的实体
User
介绍了一些方法,并且我从
User
派生了类
Admin
Person
,我想在这里介绍一些其他方法

我在这里面临的问题是,在为
Admin
的导航属性赋值时,它引发异常
对于标识为“CivilRegistry.ControlledModel.Admin”的类型找不到对象映射。

用户类别:

public partial class User
{

    protected static UserRepository repository = new UserRepository();

    public User Insert(User user)
    {
        user.AddedDate = DateTime.Now;
        user.AddedUserId = this.UserId;
        return repository.Insert(user);
    }
    //
    //Other methods goes here.
    //
}
管理类:

public class Admin : User
{
    public Admin() { }

    private Admin(User user)
    {
        this.UserName = user.UserName;
        //
        //Other properties
        //
        this.AddedUser = user.AddedUser; //This line throws, Exception.
    }

    public static Admin FindBy(int id)
    {
        //repository.FindByID returns an instance of User entity.
        return new Admin(repository.FindByID(user => user.UserId == id && user.RoleId == (int)RoleEnum.Admin));
    }
}

如何解决此问题?

不支持。不能在EDMX中定义实体,然后从代码中的实体派生其他类。以这种方式创建的派生类不再是实体,EF无法检索或持久化,因为EF不再知道如何映射它们

分配导航属性失败的原因是EF知道
Admin
User
,它试图将其附加到上下文,但在映射(EDMX)中找不到
Admin
类型


解决方案是映射继承=将继承移动到EDMX,您将在其中定义
User
实体和派生的
Person
Admin
实体。你有一些教程。

你考虑过只使用代码/POCO吗?请多谈谈你使用的T4模板——没有看到这一点,这个问题很难回答T4上的所有地方,除此之外,所有内容都与自动生成的内容相同。@CarstenKönig:我已经更新了我的问题。请让我知道,如果你需要任何进一步的澄清。