[英]Class property for a Foreign key
我的問題是兩方面的,並且彼此相關
如何在代表外鍵的 class 中定義或編寫屬性以及如何使用 dapper 填充它
我正在使用的技術:
使用 dapper 作為 ORM
MySQL 中的數據庫
使用 WPF/C# .netframework 4.7
例如:假設有兩個實體客戶和產品,客戶有一個客戶表,一個產品有一個產品表
一個客戶可以有零個或多個產品,一個產品應該只與一個人相關,所以這是一個從客戶到產品的一對多關系
注意:我知道單個產品可以有更多客戶,並且客戶可以購買多個產品,這只是一個簡單的示例,問題不在於數據庫設計,而在於如何定義那些作為外鍵的字段,作為 class 中的屬性,其中使用的 ORM 是 dapper,數據庫是 MySQL
在客戶表中有 2 個字段客戶 ID 和客戶名稱
在Product表中有3個字段,Product ID和Product Name以及C_CustomerID,這里C_CustomerID是引用Customer Table的Primary KEY的外鍵
因此,您通常會創建兩個類,一個客戶和一個產品 Class 及其實例客戶表的屬性
public int CustomerID { get; set; }
public string CustomerName { get; set; }
和產品表有
public int ProductID { get; set; }
public string ProductName { get; set; }
問題是如何定義外鍵
是這樣的嗎
選項1。
public int C_CustomerID { get; set; }
選項 2。
public List<CustomerID> C_CustomerID { get; set; }
選項 3。
public List<Customer> C_CustomerID { get; set; }
選項 4。
public List<Customer> Customer { get; set; }
以及如何填充這些,您是使用存儲過程還是使用 dapper 或手動 C# 代碼中的函數
在產品 Model 添加
public int CustomerID { get; set; }
public List<Customer> Customers { get; set; }
您應該在“現實生活”之后 model 您的數據,而不是在數據庫之后。 我會跳過你的要求,即產品應該知道誰買了它,這不是簡化,只會讓它變得更難。 客戶可以購買多種產品,並且應該擁有所購買產品的列表。 通常它會這樣做:
public class Customer
{
public int CustomerID { get; set; }
public string CustomerName
public List<Product> Products { get; set; }
}
public class Product
{
public int ProductID { get; set; }
public string ProductName { get; set; }
}
外鍵關系是您數據庫的一個實現細節,它不屬於您的數據 model。 因此,您應該創建一個包含 CustomerId 和 ProductId 的鏈接表CustomerProductLink
,在這里您將為任何Customer
購買的每個Product
添加一行。 鏈接表也只是一個實現細節,你不應該 model 它。 當您加載Customer
時,您定制 SQL 以僅加載該客戶購買的產品,例如:
SELECT * FROM Customers AS C
INNER JOIN CustomerProductLink AS L ON C.CustomerID = L.CustomerID
INNER JOIN Products AS P ON P.ProductId = L.ProductID
WHERE C.CustomerID = @CustomerID;
您使用 Dapper 多重映射加載客戶。 這樣,您的 model 就可以按原樣描述數據域,並且關系的建模方式隱藏在數據層中。
寫完這篇文章后,我發現本教程描述了幾乎相同的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.