无法在实体框架 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 显式配置 或数据注释。

我认为我的问题是两个表具有相同的键值,并且不存储另一个表的键。 谢谢。

无法在实体框架 6 中一对一映射

这将起作用

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);