簡體   English   中英

實體框架核心口徑

[英]Entity Framework Core Calibre

我正在為Caliber數據庫編寫EF核心包裝。 我已經如下配置BookTagLink

builder.HasKey(x => new {x.TagId, x.BookId });

builder.Property(b => b.BookId)
            .ForSqliteHasColumnName("book")
            .IsRequired();

builder.Property(b => b.TagId)
            .ForSqliteHasColumnName("tag")
            .IsRequired();

但是var book = tag.BookTagLinks.Select(b => b.Book); 錯誤出在:

值不能為空。\\ r \\ n參數名稱:source

我認為問題在於,在BookTagLinks表上設置了一個Idbigint )作為主鍵,當我使用書名和標簽ID時,它沒有連接點並且找不到源。

當數據庫中有一個簡單的密鑰而不是一個外鍵時,如何建立多對多關系?

原來我很煩。 我將BookTagLinks聲明為ICollection,但忘了在構造函數中實例化它。 另外,我發現您必須指定關系。 我按照“公共重寫無效Map(EntityTypeBuilder builder){builder.ToTable(“ books_tags_link”);

        base.Map(builder);

        builder.HasKey(x => new {x.TagId, x.BookId });

        builder.HasOne(bt => bt.Book)
            .WithMany(b => b.BookTagLinks)
            .HasForeignKey(bt => bt.BookId);

        builder.HasOne(bt => bt.Tag)
            .WithMany(t => t.BookTagLinks)
            .HasForeignKey(bt => bt.TagId);

        builder.Property(b => b.BookId)
            .ForSqliteHasColumnName("book")
            .IsRequired();

        builder.Property(b => b.TagId)
            .ForSqliteHasColumnName("tag")
            .IsRequired();

    }`

現在一切正常...

暫無
暫無

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

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