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:我已经更新了我的问题。请让我知道,如果你需要任何进一步的澄清。