簡體   English   中英

外鍵的 Class 屬性

[英]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.

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