gpt4 book ai didi

c# - 在 Entity Framework 中将 1 映射到 0-1

转载 作者:行者123 更新时间:2023-11-30 22:24:00 24 4
gpt4 key购买 nike

首先编写 Entity Framework (5) 代码,虽然我们没有从代码生成数据模型——我们只是手动保持它们同步(没有听起来那么痛苦)。

尝试建立 1 对 0-1 的关系。以下是使用可能具有 0 或 1 个地址的客户的虚构示例的设置:

编辑:原始示例不正确。客户可以有 0-1 个地址,地址正好有 1 个客户。表格设计和代码均已更新。

Address--------------AddressId (identity)AddressTextCustomerId (Edit: this employs a unique constraint)
Customer--------------CustomerId (identity)CustomerName

Relevant part of Address mapping:

   this.HasKey(t => t.AddressId);
//SEE NOTE ON THIS BELOW
//this.Property(t =>t.AddressId).
HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
this.HasRequired(t => t.Customer)
.WithOptional();

客户映射的相关部分:

  this.HasKey(t => t.CustomerId);
this.HasOptional(b => b.Address)
.WithRequired();

注意客户中注释掉的行。如果我包含这个,我会收到以下错误:

A dependent property in a ReferentialConstraint is mapped to a store-generated column. Column: 'CustomerId'.

如果我不包含它,我会得到:

Cannot insert explicit value for identity column in table 'Customer' when IDENTITY_INSERT is set to OFF.

我搜索了 high 和 low,上面的代码似乎是推荐的方法。我还看到一些模糊的提及,除非两个表共享同名的键,否则无法建模 1:1 关系?

这种关系可以用代码建模吗?如果可以,正确的语法是什么?

最佳答案

您的映射看起来无效。你是说 Address 有一个可选的 Customer,而 Customer 有一个必需的地址,但是你的 Address Customer 实体上的外键可以为空,因此关系应该相反。

此外,是的,如果您想建立一对一的关系模型,那么您应该有一个带有主键的 Customer 表,然后是一个带有主键的 Address 表一个主键列,它也是您的 Customer 表的外键。

否则,您实际上是在为数据库中的一对多关系建模。

关于c# - 在 Entity Framework 中将 1 映射到 0-1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13036635/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com