我发现的大多数问题都不是我正在寻找的类型。实体框架两端可选1对1关系
我有2个表:
public class User
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid UserId { get; set; }
public Guid? CustomerId { get; set; }
[ForeignKey("CustomerId")]
public Customer Customer { get; set; }
}
public class Customer
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid CustomerId { get; set; }
public Guid? UserId { get; set; }
[ForeignKey("UserId")]
public User User { get; set; }
}
甲User
罐存在而不被一个Customer
和Customer
而不一个User
可以存在。
我试过这样流畅的API:
modelBuilder.Entity<Customer>()
.HasOptional<User>(c => c.User)
.WithOptionalDependent(c => c.Customer)
.Map(c => c.MapKey("UserId"));
但它不断给我这个错误,当我尝试创建迁移:
Customer_User_Source: : Multiplicity is not valid in Role 'Customer_User_Source' in relationship 'Customer_User'. Because the Dependent Role properties are not the key properties, the upper bound of the multiplicity of the Dependent Role must be '*'.
更新
我将我的模型更改为:
public class User
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid UserId { get; set; }
public virtual Customer Customer { get; set; }
}
public class Customer
{
[Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid CustomerId { get; set; }
public virtual User User { get; set; }
}
随着流利的API:
modelBuilder
.Entity<Customer>()
.HasOptional(l => l.User)
.WithOptionalPrincipal()
.Map(k => k.MapKey("CustomerId"));
modelBuilder
.Entity<User>()
.HasOptional(c => c.Customer)
.WithOptionalPrincipal()
.Map(k => k.MapKey("UserId"));
这似乎是工作,但有没有办法来定义的,而不必使用MapKey
在模型中的列?
感谢第二个链接指出我正确的方向,你也许有我的编辑答案? – YesMan85
您是否看到编辑过的答案? – rlartiga
我读过呀。我认为这是EF实施的罪魁祸首。我首先创建了表模型,然后从中生成代码。 EF实际上使它成为1 .. *关系而不是1..1关系。 – YesMan85