我有一个类似下面的会员模块(我简化了)
public class User
{
public int Id { get; set;}
public int UserDetailId {get; set;}
public virtual UserDetail UserDetail {get; set;}
}
public class UserDetail
{
public int Id {get; set;}
public int UserId {get; set;}
public string UserName {get; set;}
public string PassWord {get; set;}
public virtual User User {get; set;}
}
然后我通过许多项目使用这个结构,但有一些改进,如下面
public class CustomUser : User
{
public string FirstName {get; set;}
public string LastName {get; set;}
public string EMail {get; set;}
}
CustomUser和UserDetail之间的关系应该是一对一的,Discrimininator字段应该被丢弃。我正在使用流利的api。但我不能成功地做到这一点。
答案 0 :(得分:2)
只需为每种类型指定表映射:
modelBuilder.Entity<User>().ToTable("Users");
modelBuilder.Entity<CustomUser>().ToTable("CustomUsers");
Discriminator列。但您可以为此列指定自己的名称和值。这是一个例子:
modelBuilder.Entity<User>()
.Map<User>(m => m.Requires("UserType").HasValue(0))
.Map<CustomUser>(m => m.Requires("UserType").HasValue(1));
modelBuilder.Entity<User>()
.HasOptional(u => u.UserDetail)
.WithRequired(ud => ud.User)
.Map(m => m.MapKey("UserId"))
.WillCascadeOnDelete(true);
对于这些课程
public class User
{
public int Id { get; set; }
public virtual UserDetail UserDetail { get; set; }
}
public class CustomUser : User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string EMail { get; set; }
}
public class UserDetail
{
public int Id { get; set; }
public string UserName { get; set; }
public string PassWord { get; set; }
public virtual User User { get; set; }
}
EF将生成具有一对一关系的以下表格(UserId
为FK):
答案 1 :(得分:0)
您可以尝试查看此one。可能是您在使用Fluent-API时遗漏了一些东西。