Entity framework 使用EF CodeFirst创建1:1关系
我首先与EF代码作斗争,并试图毫无乐趣地绘制一个1:1的关系图 基本上,用户可以拥有userdetail 我正在两个表上设置主键。在我的UserDetail表上,有一个字段UserId,我正试图用作FKEntity framework 使用EF CodeFirst创建1:1关系,entity-framework,ef-code-first,Entity Framework,Ef Code First,我首先与EF代码作斗争,并试图毫无乐趣地绘制一个1:1的关系图 基本上,用户可以拥有userdetail 我正在两个表上设置主键。在我的UserDetail表上,有一个字段UserId,我正试图用作FK public class User:BaseModel { public virtual UserDetail UserDetail { get; set; } public string UserName { get; set; } } public class UserDet
public class User:BaseModel
{
public virtual UserDetail UserDetail { get; set; }
public string UserName { get; set; }
}
public class UserDetail:BaseModel
{
public virtual User User { get; set; }
[ForeignKey("User")]
public int UserId { get; set; }
public string UserDetailName { get; set; }
}
public class BaseModel{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
}
当我尝试使用addmigration
命令时,我得到了这个错误
UserDetail\u User\u Source::多重性在关系“UserDetail\u User”中的角色“UserDetail\u User\u Source”中无效。因为依赖角色属性不是键属性,所以依赖角色的多重性上限必须为“*”
我需要做什么才能让它工作?这当然不应该那么难吧
根据@steve green的评论更新如下
我按照史蒂夫的建议配置了fluentapi
modelBuilder.Entity<User>()
.HasRequired(t => t.UserDetail)
.WithRequiredPrincipal(t => t.User);
FK配置为UserDetailId
是否应为UserId
略加修改的模型
public class UserDetail
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int UserDetailId { get; set; }
public virtual User User { get; set; }
public int UserId { get; set; }
public string UserDetailName { get; set; }
}
去掉属性
[ForeignKey("User")
详细地。我还要补充一点
int UserDetailId
对用户
这应该会起作用。如果要使用基表,则不能使用注释,因为(正如您所提到的)所需依赖项上的键必须是外键。您需要流畅的api代码:
modelBuilder.Entity<User>()
.HasRequired(t => t.UserDetail)
.WithRequiredPrincipal(t => t.User);
modelBuilder.Entity()
.HasRequired(t=>t.UserDetail)
.with required principal(t=>t.User);
可能的重复部分略有不同。我的模型无法在主键上添加[ForeignKey]属性。因为我的所有模型都继承自具有主键的基本模型类。我将更新我的代码示例
modelBuilder.Entity<User>()
.HasRequired(t => t.UserDetail)
.WithRequiredPrincipal(t => t.User);