Entity framework core 与ef core 5的一对一关系(使用2 FK)

Entity framework core 与ef core 5的一对一关系(使用2 FK),entity-framework-core,foreign-keys,one-to-one,ef-core-3.1,ef-core-5.0,Entity Framework Core,Foreign Keys,One To One,Ef Core 3.1,Ef Core 5.0,我有这两个实体。每本书可以有一个或零个BookDetail(1:1关系) 我想要有两个边的外键,我只需要为一个边的外键找到解决方案,但我想在EF Core 5中存储BookDetail的FK Id,反之亦然 要模拟一本书可以有0或1个BookDetail的事实,您必须在书上设置FK,指向BookDetail,可为空,选中此项: 这是: } 如果没有书籍本身,BookDetail就不可能存在,这是否符合现实,因此在这种情况下,BookDetail与书籍之间的FK必须不可为空。 我不会“扭曲

我有这两个实体。每本书可以有一个或零个BookDetail(1:1关系)

我想要有两个边的外键,我只需要为一个边的外键找到解决方案,但我想在EF Core 5中存储BookDetail的FK Id,反之亦然


要模拟一本书可以有0或1个BookDetail的事实,您必须在书上设置FK,指向BookDetail,可为空,选中此项:

这是:

}

如果没有书籍本身,BookDetail就不可能存在,这是否符合现实,因此在这种情况下,BookDetail与书籍之间的FK必须不可为空。 我不会“扭曲”FK的名称,以便利用EFCore约定:

 public class BookDetail
 {
    public int BookDetailId{ get; set; }
    public string Weight { get; set; }
    public string NumberOfPages { get; set; }
    public DateTime PublicationDate { get; set; }

    public int BookId { get; set; } /* FK to Book by conventions*/
    public Book Book{ get; set; }
}
这就足以让EFCore约定确定您有一对一的关系,Book是该关系的独立成员,BookDetail是从属成员:独立始终是必需的

额外的一点信息:您可能希望检查拥有的实体,您的BookDetail实体可以被视为Book的“复杂属性”,这意味着尽管BookDetail本身不能有Id


在这两个类上都有public int BookId{get;set;}和public int BookDetailId{get;set;}。你还想要什么?在我40年的工作经验中,我从来没有听说过双面键。你能给我们举个例子吗?如果你指的是循环外键引用,那么它们在任何数据库中都是不允许的。有一种变通方法,但由于您自己找不到这种变通方法,因此使用它还为时过早。2个FK定义了2个关系,而不是一个关系。很简单,每个FK都是独立的关系。没有所谓的“双方FK”关系。所以,重新审视你的设计/需求,因为你所要求的不会发生。@sergey谢谢你,所以我需要改变它。@ivanstoev谢谢你。
 public class BookDetail
 {
        public int BookDetailId{ get; set; }
        public string Weight { get; set; }
        public string NumberOfPages { get; set; }
        public DateTime PublicationDate { get; set; }

        public int BooklId { get; set; } /* FK for Book */
        public Book Book{ get; set; } 
 }
 public class Book
 {
    public int BookId{ get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public string ISBN { get; set; }
    public string Price { get; set; }

    public int? BookDetailId { get; set; } /* nullable FK to BookDetail */
    public BookDetail BookDetail{ get; set; }
 public class BookDetail
 {
    public int BookDetailId{ get; set; }
    public string Weight { get; set; }
    public string NumberOfPages { get; set; }
    public DateTime PublicationDate { get; set; }

    public int BookId { get; set; } /* FK to Book by conventions*/
    public Book Book{ get; set; }
}