gpt4 book ai didi

c# - 首先通过代码发出多个 1 对 1 关联?

转载 作者:太空宇宙 更新时间:2023-11-03 13:46:25 24 4
gpt4 key购买 nike

我正在使用 Code First 方法创建数据库。在这里,我尝试使用 Shared primary key 方法实现 1 对 1 关系:

public partial class AccountHolder
{
public int AccountHolderId { get; set; }

public virtual PersonalDetail Detail { get; set; }
}

//Added later
public partial class Nominee
{
public int NomineeId { get; set; }

public virtual PersonalDetail Detail { get; set; }
}

public partial class PersonalDetail
{
public int PersonalDetailId { get; set; }

...
}

我流畅的 Api 代码:

        modelBuilder.Entity<AccountHolder>().HasOptional(p => p.Detail)
.WithRequired()
.WillCascadeOnDelete();
//Added later
modelBuilder.Entity<Nominee>().HasOptional(p => p.Detail)
.WithRequired()
.WillCascadeOnDelete();

最初我只有 2 个表 AccountHolderPersonalDetails,共享主键方法在上面运行良好。但是现在当我添加 Nominee 表时出现问题,该表也与 PersonalDetails 具有一对一关系。添加新表 Nominee 后,当我运行 代码优先迁移Update-Database 命令 时发生了异常:

The operation failed because an index or statistics with name 'IX_PersonalDetailId' already exists on table 'PersonalDetails'

谁能告诉我问题是什么以及我该如何解决这个问题?

编辑:

我在这里分享我对这个问题的研究,如果我错了请指正。可能会发生此异常,因为在共享主键方法中,从属表的 PK 也是主表的 FK。因此,在这种情况下,有 2 个主表,即 AccountHolderNominee,用于 1 个从属表,即 PersonalDetail。因此,当 Entity Framework 尝试创建 2 个同名的 FK 时,结果将是上述异常。

最佳答案

我想扩展我的评论。

Even if you resolve the naming issue, you cannot have one column be a foreign key to two tables.

假设您的 AccountHolder 表有以下记录

Id
----
1
2
3

而你的Nominee表有如下记录

Id
----
3
4
5

假设您想将一条记录插入到 DetailId = 3 的 PersonalDetail 中。这与 Nominee 3 或 AccountHolder 3 匹配吗?

此外,如果您尝试使用 DetailId = 2 插入 PersonalDetail,您将违反 FK,因为没有 Nominee 2。如果您想插入 DetailId = 4,同样适用,没有 AccountHolder 4,所以你会得到一个 FK 违规。

关于c# - 首先通过代码发出多个 1 对 1 关联?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15188690/

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