【问题标题】:Many to zero or one relationship多对零或一对一的关系
【发布时间】:2019-06-04 13:22:58
【问题描述】:

我有一个实体/表purchases。此表有一个customerId。 我还有另一张桌子customers。此表有customerId

一个客户可以进行多次购买。但是这个数据库只是主数据库的视图/表示。这意味着客户可能在场,也可能不在场。但是如果存在购买将始终有customerId。表中可能还没有对应的客户。

我想使用带有客户信息的 EF6 读取 Purchases(如果存在或仅为空)。

如何在 EF6 中进行设置?

只要我将 customerId/Customer 添加到购买中,EF 就会创建一个外键并防止在客户不存在的地方插入购买。我希望它们两个表是独立的,并且仅在购买时填充客户。

有什么想法吗?

【问题讨论】:

  • 好吧,如果您有非空客户 ID,但没有具有该客户 ID 的客户记录 - 那么您无法在数据库中定义关系(因此无法定义 EF)。因此,正如您所提到的,您需要让他们保持独立,没有任何关系。然后,您需要从购买到客户的过程中进行 LEFT JOIN。

标签: c# sql .net entity-framework-6


【解决方案1】:

您需要将purchase 表中的customerId 字段设为Nullable。

如果您使用的是 EF Code First 方法:

public int? CustomerId { get; set; }
public virtual Customer Customer { get; set; }

否则,请在数据库架构中更改它并重新加载您的 EF 模型:

ALTER TABLE purchase ALTER COLUMN customerId INT NULL

当然,如果您不使用 INT 作为 ID 的类型,请适当更改它。

【讨论】:

  • @ravish.hacker 如果是这种情况,插入带有空 customerId 的购买应该不会有任何问题。你错过了一些东西。向我们展示 Purchase 的实体类和表的 DB 模式。
  • 嗯.. 也许我没有指定。我所有的购买数据都有一个客户 ID。对于所有行。但它的客户我没有。这就是它失败的原因。因为我正在使用不存在的客户 ID 添加购买。这两个表的填充是异步的,所以我不能保证顺序。
  • @ravish.hacker 我不明白你的问题。由于客户表中缺少客户或您无法在没有客户 ID 的情况下添加购买时,代码是否会在映射购买时引发异常?因为您这样说:'一旦我将 customerId/Customer 添加到购买中,EF 就会创建一个外键并防止在客户不存在的地方插入购买'。如果问题是第二个问题,您应该可以毫无问题地为 customerId 添加具有空值的新条目。
猜你喜欢
  • 2014-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-25
  • 1970-01-01
  • 2021-06-25
  • 2015-11-15
相关资源
最近更新 更多