gpt4 book ai didi

c# - Entity Framework 外键约束

转载 作者:太空狗 更新时间:2023-10-30 01:06:02 24 4
gpt4 key购买 nike

我仍在思考如何使用 EF。我在我的项目中使用代码优先方法并偶然发现了以下问题。

我有以下对象:

public class Employee
{
public int EmployeeId { get; set; }
public int BusinessUnitId { get; set; }

public virtual BusinessUnit BusinessUnit { get; set; }
}

public class Quote
{
public int QuoteId { get; set; }

[DisplayName("Business Unit")]
public int BusinessUnitId { get; set; }

[DisplayName("Responsible Employee")]
public int EmployeeId { get; set; }

[DisplayName("Date Issued")]
[DataType(DataType.Date)]
public DateTime DateIssued { get; set; }

[DataType(DataType.MultilineText)]
public string Description { get; set; }

public virtual Employee Employee { get; set; }
public virtual BusinessUnit BusinessUnit { get; set; }
}

两者都包含一个 BusinessUnit 属性,而且 EF 似乎不想允许这样做。当执行包含一堆包含的 Linq 查询时,看到我在 Index() 方法上收到以下错误。

Introducing FOREIGN KEY constraint 'FK_dbo.Quotes_dbo.BusinessUnits_BusinessUnitId' on table 'Quotes' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint. See previous errors.

有人可以向我解释为什么会出现此错误以及我可能会如何修复它。谢谢。

编辑:

这肯定是由于在 Quote 对象和 Employee 对象中包含 BusinessUnit 属性造成的。我只是不明白为什么。

编辑 2:

BusinessUnit 类的代码:

public class BusinessUnit
{
public int BusinessUnitId { get; set; }
public string Name { get; set; }
}

最佳答案

现在,如果您尝试删除员工,它会尝试删除报价、该报价的 BusinessUnit,然后是该 BusinessUnit 的员工等。

要么使某些关系成为可选的,要么关闭如下的级联约定:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Either entirely
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();

// or for one model object
modelBuilder.Entity<Person>()
.HasRequired(p => p.Department)
.WithMany()
.HasForeignKey(p => p.DepartmentId)
.WillCascadeOnDelete(false);
}

关于c# - Entity Framework 外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16715481/

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