CodeFirsrt多對多關係配置

2022-09-11 17:15:19 字數 1643 閱讀 9478

比如:有乙個業務,一張學生表,還有一張課程表,要求,將兩表建立多對多關係。

我們可以通過分析:乙個學生在課程表裡可以有多個課程,每個課程有可以被多個學生同時選擇。

配置多對多關係思路:多對多關係,應該有乙個中間表,用於關聯,關聯表至少兩個字段,就是兩張表的id。

具體操作如下:

學生表的實體:

public class userinfo

[stringlength(128) ,required]

public string username

public string number

public virtual listcourse //用作導航屬性使用,因為有可能有多個課程

}

課程實體表:

public class course

public string coursename

public virtual listuseres //可能有多個學生對應這個導航屬性

}

執行,

通過在兩個表裡寫互相的導航屬性的集合,就能建立多對多關係。

上面的結果如圖:

可以看到執行後給你自動建立了一張表,這個表裡用兩張表的主鍵當做聯合主鍵,並且表名就是用兩張表的名字連線在一起的,還在後面加了es,而且聯合主鍵的名字格式也是用表名+主鍵名命名的。

這個新建的表就代表多對多關係的表。

模型裡的表只有三個:

這種方法要在第一種方法的基礎上才能用

如果不想使用預設的表名,還有聯合主鍵名,可以在上下文物件裡的onmodelcreating方法裡自己配規則

如下圖:

結果如下圖:

可以看到名字都不一樣了

使用fluentapi,也就是自己配置表名的優點

更靈活,關聯表的表名,兩個外來鍵可以自己靈活控制

自己維護

最靈活的,不僅可以自己控制表名外鍵名,還可以自己維護物件已經其他其他字段。

(多對多其實可以理解成兩個1對多。可以拆分成兩個多對多)

因為多對多關係是兩個一對多,所以可以自己建立乙個表的對映,然後在這個表裡存這兩個一對多的外來鍵即可。

如下圖:

被引用的兩個表裡的導航屬性可要可不要,根據需要來:

可以看到表裡已經有了兩個外來鍵了

這種方式建立多對多關係的表非常靈活,表名和欄位名取名和維護也非常容易不像第二種方法那樣麻煩。

多對多關係

實體模型中相關的模型之間為了方便查詢需要做到你中有我 我中有你 一對多表設計上是在多方應用少方的主鍵作為外來鍵約束 模型上需要在多方加入乙個少方模型物件的屬性,在少方加入乙個多方物件的列表 語法 少方物件 db.relationship 少方模型名 backref db.backref xxlist...

Flask sqlalchemy多對多關係

from flask import flask from flask sqlalchemy import sqlalchemy article tag db.table article tag db.column article id db.integer,db.foreignkey article...

多對多關係對映

需要用到 manytomany註解,然後在需要維護關係的一方,加上 jointable註解。必須指定乙個維護關係,否則會導致關係表id重複出現錯誤。jointable 有以下屬性,joincolumns 設定該實體類對映在關係表中的外來鍵列名和參照列,inversecolumns 設定和該實體類關聯...