0

我对 EDM 很陌生,过去写过很多 ADO.Net 的东西。我有三张桌子:

**Product:**
Prod_ID - PK

**Product_MaxLoan**
Prod_ID - PK

**Product_MinLoan**
Prod_ID - PK

这些在 MS SQL 2005 中托管的表尚未配置 FK 或约束,它们将具有名义上的 1 对 1 关系。例如,ID 为 1 的 Product 的每一行,Product_MaxLoan 和 Product_MinLoan 中都会有一行 ID 为 1。

在 Visual Studio 2010 中,我想正确设置 EDM,以便将基数设置为 1 到 1。我之前对表和以下设置进行了 FK 约束,但是,这只允许 0..1 基数(我想是为了迎合 Product 可能没有 Product_MaxLoan 或 Product_MinLoan 的事实)。

**Product:**
Prod_ID - PK

**Product_MaxLoan**
ID - PK
Prod_ID - FK

**Product_MinLoan**
ID - PK
Prod_ID - FK

问题:

  • 对于在 SQL 2005 中设置这些表,您有什么建议?对于 EDM 中的一对一关系,您会设置 FK 吗?
  • 您能否在 SQL 2005 中设置 EDM 在从数据库导入时读取的 PK 关系?
  • 一个产品包含大约 300 个属性,因此在单个表中包含所有这些数据将是糟糕的数据库规范化(因此有许多 1 - 1 个表)。最佳实践是将所有这些属性放入单个 EDM 类中吗?我的直觉反应是将其分解为数据库中的结构(这是我的 ADO 遗产),产品的每个逻辑部分都有一个类。

您的建议将不胜感激。

最好的祝福,

标记

4

1 回答 1

0

在数据库中使用此配置:

**Product:**
Prod_ID - PK

**Product_MaxLoan**
Prod_ID - PK, FK (to Product)

**Product_MinLoan**
Prod_ID - PK, FK (to Product)

这将在数​​据库级别以及 EF 中强制建立一对一的关系。关系本身将是 1 - 0..1 (Product可以在没有MaxLoanand的情况下存在MinLoan),因为真正的 1 : 1 不能存在于数据库中。Real 1 : 1 要求两个实体始终存在 = 如果第二个不存在,则不能插入第一个,如果第一个不存在,则不能插入第二个。如何在不关闭参照完整性的情况下插入它们?

于 2012-01-18T11:13:38.107 回答