我有多个较小版本的类映射到单个数据库表
e.g UserBrief类:
[Table("Users")]
public partial class UserBrief
{
[Key]
public int EmployeeID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
UserAdmin类
[Table("Users")]
public partial class UserAdmin : UserBrief
{
public int RoleID { get; set; }
}
UserHR Class
[Table("Users")]
public partial class UserHR : UserBrief
{
public string EmailAddress { get; set; }
public string Phone { get; set; }
}
用户类
[Table("Users")]
public partial class User
{
[Key]
public int EmployeeID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public int RoleID { get; set; }
public string EmailAddress { get; set; }
public string Phone { get; set; }
}
我有多个有界的背景。根据我上面使用的上下文的功能。
如果我在上下文中添加单个类并忽略所有其他类,那么它可以正常工作。
e.g
public DbSet<UserHR> UserHRs { get; set; }
protected override void OnModelCreating(System.Data.Entity.DbModelBuilder modelBuilder)
{
modelBuilder.Ignore<UserBrief>();
modelBuilder.Ignore<UserAdmin >();
modelBuilder.Ignore<User>();
}
现在,如果我添加了UserBrief和UserHRs 它提供错误“无效的列名称'Discriminator'”,因为EF假定这是每层次表(TPH)方法。
我一直在寻找解决方案,但找不到如何做到这一点。
有什么想法吗? 提前谢谢。
答案 0 :(得分:0)
TPH方法的POCO对象中的继承类应该表示类的子类型,而不仅仅是属性部分。使用UserHR和UserAdmin组合的User表会破坏此表示形式。
您可以尝试向User
表添加一个Discriminator属性来修复错误,但我建议您只使用具有可空属性的Users
表或将对象建模为1对 - 1关系:
public class UserBrief
{
[Key]
public int EmployeeID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public virtual UserAdmin UserAdmin { get; set; }
public virtual UserHR UserHR { get; set; }
}
public class UserAdmin
{
[Key]
[ForeignKey("UserBrief")]
public int EmployeeID { get; set; }
public int RoleID { get; set; }
public virtual UserBrief UserBrief{ get; set; }
}
public class UserHR
{
[Key]
[ForeignKey("UserBrief")]
public int EmployeeID { get; set; }
public string EmailAddress { get; set; }
public string Phone { get; set; }
public virtual UserBrief UserBrief{ get; set; }
}