c# - Entity Framework 外键约束

标签 c# asp.net-mvc entity-framework

我仍在思考如何使用 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/

相关文章:

asp.net - MVC 3——在 foreach 循环内,避免重复的 html

asp.net-mvc - 使用参数 asp.net mvc 创建授权过滤器

c# - Entity Framework 拆分表删除

c# - DataCache 操作 - 验证成功

c# - 在 C# 中验证 MySQL 数据库的 SHA256 哈希值

c# - 如何设置有效的本地ADFS URI?

c# - 在 C# 中使用类似于 Java 的多维数组

asp.net-mvc - ReCAPTCHA v2 无法在 IE 兼容性 View 中工作

c# - Entity Framework : Automatically sorting generic DbSet by primary key

c# - EF 6 中缺少 QueryableExtensions