Theme NexT works best with JavaScript enabled

ShunNien's Blog

不積跬步,無以致千里;不積小流,無以成江海。

0%

Entity Framework 與 Dapper Contrib 複合鍵的設定

紀錄 Entity Framework v6 Code First 與 Dapper Contrib 的模型建立時,資料表索引的設定;順便替懶得查文件的同事紀錄。

以下資料表模型參考 Northwind 建立,使用 RegionOrder Details
Regions

OrderDetail

Entity Framework

當資料庫資料表單一 Primary Key 時,透過 Attribute 設定 [Key] 即可。

1
2
3
4
5
6
7
8
public class Regions
{
[Key]
public int RegionID { get; set; }

public string RegionDescription { get; set; }

}

當資料表是複合索引 (Composite keys) 時,針對是索引的欄位還是使用 [Key] 來設定,但是必須設定排序的順序,否則會出現錯誤;當複合鍵時,除了 [Key] 外,尚需要設定 [Column(Order = n)]

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class OrderDetails
{
[Key]
[Column(Order = 1)]
public int OrderID { get; set; }
[Key]
[Column(Order = 2)]
public int ProductID { get; set; }

public decimal UnitPrice { get; set; }

public short Quantity { get; set; }

public float Discount { get; set; }

}

Dapper Contrib

Dapper ContribEntity Framework 不同,索引Attribute 隨著是否自動增值有所差異,自動增值的索引直接使用 [Key] , 非自動增值的索引使用 [ExplicitKey]
所以 Dapper Contrib 是已針對索引的自動增值與否進行設定,不管是單一鍵還是複合鍵都是如此。

以下為單一鍵的範例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
// 自動增值
public class Regions
{
[Key]
public int RegionID { get; set; }

public string RegionDescription { get; set; }

}

// 非自動增值
public class Regions
{
[ExplicitKey]
public int RegionID { get; set; }

public string RegionDescription { get; set; }

}

以下為複合鍵的範例,假設當兩個複合鍵皆是自動增值或是皆非自動增值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
// 自動增值
public class OrderDetails
{
[Key]
public int OrderID { get; set; }
[Key]
public int ProductID { get; set; }

public decimal UnitPrice { get; set; }

public short Quantity { get; set; }

public float Discount { get; set; }

}
// 非自動增值
public class OrderDetails
{
[ExplicitKey]
public int OrderID { get; set; }
[ExplicitKey]
public int ProductID { get; set; }

public decimal UnitPrice { get; set; }

public short Quantity { get; set; }

public float Discount { get; set; }

}

參考資料

附上使用 LinqPad 的簡單範例, Entity FrameworkDapper Contrib ,使用前記得引用參考。

歡迎關注我的其它發布渠道