簡體   English   中英

在沒有所有鍵/外鍵的情況下在實體框架中創建導航屬性

[英]Create Navigation Property in Entity Framework Without all keys/foreign keys

我一直試圖找出是否有可能在不使用所有鍵的情況下在EF中創建關聯。

下面是一個示例,其中作者中有一個組合鍵,但是我在書中只有一部分。 我的問題是如何在沒有所有鍵的情況下創建Navigation屬性?

[Table("Book")]
public class Book {

    [Key]
    public int ID { get; set; }

    public string AuthorLastName { get; set; }

    public virtual Author Author { get; set; }
}

[Table("Author")]
public class Author {

    [Key, Column(Order=0)]
    public string AuthorFirstName { get; set; }

    [Key, Column(Order=1)]
    public string AuthorLastName { get; set; }

    public virtual ICollection<Book> Books { get; set; }
}

internal class BookConfig : EntityTypeConfiguration<Book> {
    public BookConfig()
    {
        HasRequired(hr => hr.Author)
            .WithMany(wm => wm.Books)
            .HasForeignKey(fk => new { 
                fk.AuthorLastName
            });
    }
}

這顯然是行不通的,因為我在書中沒有將全部組合鍵以這種方式關聯到作者的所有鍵。

您可以執行以下操作:

[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
public int ID { get; set; }

這將使您可以手動控制按鍵; 但是數據庫中的表必須具有主鍵! 我不知道為什么您需要這樣的東西,我認為這是其他地方的問題。

您不能這樣做,因為這是多對多的關系。

在您的示例中,如果僅使用AuthorLastName則可以有多個具有相同姓氏的作者。 因此,在關系的這一方面有許多要素。 顯然,另一邊有很多書(作者可以寫很多書)。

因此,絕對不能將其建模為一對多關系。

幸運的是, 以前有人曾解釋過書籍和作者的問題。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM