我尝试使用主键和两个表的唯一键(而不是主键)在两个表之间创建一对一关系。
以下是我想要工作的内容。
// The principal end
public class A
{
// The primary Key
public int AId { get; set; }
// The navigation property
public virtual B B { get; set; }
}
// The dependent end
public class B
{
// The primary Key
public int BId { get; set; }
// The unique key
[Index(IsUnique = true)]
public int AId { get; set; }
// The navigation property
public virtual A A { get; set; }
}
但后来我看到了这个错误:
无法确定类型之间关联的主要结尾' A'和' B'。必须使用关系流畅API或数据注释显式配置此关联的主要结尾。
我非常确定SQL Server中允许使用primarykey-uniquekey关系。看起来EF6并不支持它。似乎EF Core 1.0,但现在移植到EF Core是不可行的。
为什么我们需要这种关系:
我们在生产中有两个表A
和B
,但应该存在的一对一关系缺失。这种关系是我们需要的,因此我们可以使用EF从A
对象导航到B
对象。由于两个表都有值,我们无法真正制作主键,即外键 - 我们最终会得到不正确的数据。
我解决这个问题的方法是:
A
ids 另一种解决方法是非常受欢迎。
答案 0 :(得分:0)
这可以通过使用 Fluent API 的 .HasPrincipalKey() 方法的 EF Core 实现。不幸的是,EF6 不支持,这是一种耻辱,因为对唯一键的关系本质上可以与外键约束一样对待,所以我想它会很容易添加。
既然 MS 已经忘记了 EF6,而是专注于 EF Core,这将永远不会发生。我真的很喜欢使用视觉实体设计器,因为它节省了很多时间。看着 EF Core DbContext 脚手架生成器为我吐出的一千多行代码,至少可以说是令人沮丧的。当然,当你处理一个由两个可爱的桌子组成的演示项目时,这很不错,但我们都知道在现实世界中情况并非如此。使用 ORM 的全部目的是节省时间,但我不确定必须管理数千行配置代码是否更好。只需两美分。