无法在实体框架 6 中一对一映射
本文关键字:一对一 映射 框架 实体 | 更新日期: 2023-09-27 17:57:03
我在EF 6中映射一对一关系时遇到问题。 我的课程是:
public class Membership
{
[Key]
public decimal Id { get; set; }
[ForeignKey("Id")]
public virtual User User { get; set; }
}
public class User
{
[Key]
public decimal Id { get; set; }
[ForeignKey("Id")]
public virtual Membership Membership { get; set; }
}
我收到异常:
无法确定 键入"用户"和"成员资格"。该协会的主要目的 必须使用关系流畅 API 显式配置 或数据注释。
我认为我的问题是两个表具有相同的键值,并且不存储另一个表的键。 谢谢。
这将起作用
public class Membership
{
[Key]
public decimal Id { get; set; }
[ForeignKey("User")]
public decimal UserId {get;set;}
public virtual User User { get; set; }
}
public class User
{
[Key]
public decimal Id { get; set; }
[ForeignKey("Membership ")]
public decimal MemberShipId {get;set;}
public virtual Membership Membership { get; set; }
}
你应该参考每个拉迪斯拉夫的这个线程,不过我也会把内容放在这里。
在一对一的关系中,一端必须是主端,第二端必须是主端 要依赖。主端是将首先插入的那个 并且可以在没有依赖者的情况下存在。依赖端是 一个必须插入主体之后,因为它有外国 密钥到主体。
在实体框架的情况下,依赖中的FK也必须是它的PK,所以在 您的案例您应该使用:
public class Boo
{
[Key, ForeignKey("Foo")]
public string BooId{get;set;}
public Foo Foo{get;set;}
}
或使用流畅映射:
modelBuilder.Entity<Foo>()
.HasOptional(f => f.Boo)
.WithRequired(s => s.Foo);