gpt4 book ai didi

entity-framework - Entity Framework 两端可选1对1关系

转载 作者:行者123 更新时间:2023-12-01 03:52:30 25 4
gpt4 key购买 nike

我发现的大多数问题都不是我要找的类型。

我有2张 table :

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 can 存在而不是 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 ?

最佳答案

link 1

link 2

该链接的问题在于我不确定它们是否为问题提供了实际解决方案:因为我不知道它是否为两个表中的外键提供了唯一性(正如 link 建议的那样)。因为没有 EF 唯一约束,您必须手动创建它(在生成器中)

最后 link解释了执行 1:* 关系的独特形式是使用一个表的外键作为另一个表的主键。

祝你好运。

关于entity-framework - Entity Framework 两端可选1对1关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21082085/

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