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