首先编写实体框架 (5) 代码,尽管我们不是从代码生成数据模型——我们只是手动保持它们同步(比听起来更痛苦)。
试图建立一个 1 对 0-1 的关系。这是使用可能具有 0 或 1 个地址的客户的虚构示例的设置:
编辑:原始示例不正确。客户可以有 0-1 个地址,地址正好有 1 个客户。表设计和代码均已更新。
地址 -------------- AddressId(身份) 地址文本 CustomerId (编辑:这采用了唯一约束)
顾客 -------------- 客户 ID(身份) 顾客姓名
地址映射的相关部分:
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();
请注意在客户中注释掉的行。如果我包括这个,我会收到以下错误:
ReferentialConstraint 中的依赖属性映射到存储生成的列。列:“客户 ID”。
如果我不包括它,我会得到:
当 IDENTITY_INSERT 设置为 OFF 时,无法在表“客户”中插入标识列的显式值。
高低搜索过,上面的代码似乎是推荐的做法。我还看到一些模糊的提及,除非两个表共享同名的键,否则无法建模 1:1 关系?
这种关系可以用代码建模吗?如果可以,正确的语法是什么?