簡體   English   中英

實體框架核心外鍵默認約定

[英]Entity Framework Core ForeignKey Default Conventions

我正在尋找[ForeignKey]約定的文檔。 我在MSDN上找到了一份命名約定列表。

我不確定哪個約定映射了以下操作。

class Student
{
    public int id{ set; get;}

    public int myclassroomid{ set; get;}

    public Classroom myclassroom{ set; get;}
}

class Classroom
{
    [Key]
    public int cid{ set; get;}
}

我不明白默認約定是如何工作的。

我找到了NavigationPropertyNameForeignKeyDiscoveryConvention ,它似乎不適用於這種情況。

我在哪里可以找到官方文檔? 如果有的話,解釋一些要點,最好有代碼示例。

NavigationPropertyNameForeignKeyDiscoveryConvention涵蓋了 Student 中的導航屬性如何找到 Student 中聲明的 FK。 AFAIK 它不會考慮在 Classroom 實體中設置的任何內容。

它將使用類型和引用名稱,因此它將查找 ClassroomId 或 MyClassroomId。 這通常會讓那些想要使用多個引用到同一實體的人絆倒,其中一個導航屬性與類型名稱匹配。 即 CustomerId/Customer Customer 和 CreatedById/Customer CreatedBy。 EF 可能會嘗試根據類型將 CreatedBy 解析為 CustomerId。

導航屬性本身將結合對在您的課堂類型中聲明為 PK 的任何字段的引用。 刪除 Classroom 中 cId 上的[Key]屬性將不起作用,因為這與 PK 約定規則不匹配。 (Id 或 ClassroomId)它也不會以這種方式影響 FK,即在 Student 中放置 cId 列很可能不會映射到 MyClassroom 引用。

就我個人而言,我總是對關系使用顯式映射,並且我避免聲明 FK 屬性,而是使用陰影屬性/ Map()代替。 如果您打算使用約定,那么您的架構應該設置為符合它們而沒有特殊情況。 最簡單且最易讀的方法是對 PK 和 FK 引用使用 {TableName}+Id。 例外是對同一個表/實體的多重引用,然后對引用及其關聯的 FK 使用描述性名稱。 即如果兩個導​​航屬性都指向客戶實體,則 CreatedBy + CreatedById 和 OrderingCustomer + OrderingCustomerId 而不是 Customer + CustomerId。

你看錯了地方——所有這些都是針對 EF6 的,而 EF Core 是完全不同的系統,所以起點應該是這里的官方文檔Entity Framework Core

外鍵約定在關系 -約定中進行了描述,特別是:

如果依賴實體包含一個名稱與這些模式之一匹配的屬性,那么它將被配置為外鍵:

  • <navigation property name><principal key property name>
  • <navigation property name>Id
  • <principal entity name><principal key property name>
  • <principal entity name>Id

在您的示例中, myclassroomid匹配規則 #2 - 導航屬性名稱“myclassroom”+“Id”。 它沒有明確提及,但匹配不區分大小寫,因此“Id` 也匹配“ID”、“id”等。

暫無
暫無

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

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