我有一个基本实体类MyCompany.Core.Model.User
,用于User
实体的公共属性:
public class User
{
public string Username { get; set; }
public string Usercode { get; set; }
}
我还有一个基映射类MyCompany.Core.Model.UserMap
来设置基类的代码优先映射User
:
public class UserMap<TUser> : EntityMapBase<TUser>
where TUser : User
{
public UserMap()
{
// Primary Key
this.HasKey(t => t.Usercode);
// Table & Column Mappings
this.ToTable("Users");
this.Property(t => t.Username).HasColumnName("Username");
this.Property(t => t.Usercode).HasColumnName("UserCode");
}
}
在一个单独的程序集中,我有一个派生类MyCompany.Model.User
,它继承自基User
类并使用一些附加属性对其进行扩展:
public class User : Core.User
{
public string Surname { get; set; }
}
此外,我有一个派生映射类MyCompany.Model.UserMap
来为附加属性提供附加配置:
public class UserMap : Core.UserMap<User>
{
public UserMap()
{
this.Property(t => t.Surname).HasColumnName("Surname");
}
}
但是,当添加MyCompany.Model.User
到上下文并注册时,MyCompany.Model.UserMap
我收到以下错误:
“MyCompany.Model.User”类型和“MyCompany.Core.Model.User”类型都具有相同的简单名称“User”,因此不能在同一模型中使用。给定模型中的所有类型都必须具有唯一的简单名称。在 Code First fluent API 中使用“NotMappedAttribute”或调用 Ignore 以从模型中显式排除属性或类型。
此链接表明您不能在模型中使用相同的“简单名称”两次。
为什么要在模型中注册基类“简单名称”,有没有办法绕过它来实现这种实体继承?
我怀疑简单的解决方案是重命名派生类;但是我宁愿避免这种情况,因为在多种情况下可能会有很多推导。
注意:使用实体框架 6.0.0-rc1(预发布)