【发布时间】:2018-01-24 00:30:18
【问题描述】:
我正在使用 C# 在 Visual Studio 2017 中进行编码,并试图以一种相关的方式来了解属性/模型类(我已经观看了很多小时的教程/示例!)。
我知道我可以创建一个 Customer 类,其中包含 Name、Currency 等属性,以及另一个名为 Address 的类,其中包含电话号码、国家/地区等。
我不明白的是,您如何使用 MS SQL 数据库以关系方式创建这些。例如。我创建了一个客户“ACME Inc.”。它的属性之一是 PrimaryAddress,它设置为“地址”类型,所以我可以直接链接到地址的属性,但是如果我需要从从表中读取的数据创建属性,我不明白该怎么做。当然我可以做 customer1.PrimaryAddress.Country = Canada,或者单独创建一个名为 Address1 的地址对象,但是如何使用 Customer 的属性引用现有的 Address 对象?
例子:
public class Customer
{
public string Name { get; set; }
public bool Enabled { get; set; }
public CAddress PriAddress { get; set } //This points to an object created using the CAddress class below. each customer has only 1 primary address
}
public class CAddress
{
public int CustomerID { get; set; } //This specifies which Customer this address belongs to
public string Name { get; set; }
public string MainNum { get; set; }
}
我不确定我所说的是否有道理,所以如果有任何其他信息有帮助,请告诉我。谢谢!
【问题讨论】:
-
如果客户可以有多个地址,那么“客户”数据和“地址”数据将位于两个不同的数据库表中。 “地址”表将有一个外键将其指向“客户”表,因此任何给定的“地址”记录都属于特定的“客户”记录。
-
数据库中的类和表之间的关系不是一种“自然”的关系——它们是完全不相关的东西。您需要一个像实体框架这样的 ORM 来在两者之间进行映射。这是一个很大的主题——实体框架非常复杂。但它基本上可以完成从表中读取数据到类中的所有繁重工作,反之亦然。
-
嗨大卫,谢谢 - 是的,我的数据库确实有这个设置,这些表是有意义的,但是将它放入 C# 是我的问题 - 当地址属于一个时,我将如何使用类和属性存储数据特定客户?
-
感谢您的回复 Sharper - 是的,我明白了,我已经知道如何使用 ADO.NET 并正在考虑使用 Dapper(因为我阅读并看到了它比 Entity 快得多的证据)。我可以让类/属性单独工作,这只是将一个与另一个相关联的问题(例如,如果我运行一个 Select 语句加载整个表地址表(包括多个客户),然后加载客户,我如何引用是否已提取属于每个客户的地址?
-
@007bond007 - 您不需要引用它们,只需将属性
Customer.PrimaryAddress设置为Address的实例,并带有对应的CustomerId。你怎么做 - 你自己的选择。例如:读取客户,按客户 ID 读取地址 - 创建客户,创建地址,设置 customer.PrimaryAddress。或者使用 ORM,您只需要通知 ORM 您希望使用地址加载客户,PrimaryAddress属性将自动填充。所以属性是“参考”
标签: c# visual-studio oop properties model