gpt4 book ai didi

entity-framework-4.1 - Entity Framework 代码优先 : FOREIGN KEY constraint may cause cycles or multiple cascade paths

转载 作者:行者123 更新时间:2023-12-03 14:35:27 24 4
gpt4 key购买 nike

Entity Framework Code First 可以为以下 POCO 生成数据库。

public class Item {
public int Id { get; set; }
public string Name { get; set; }
}

public class ItemPair {
public int Id { get; set; }

public virtual Item FirstItem { get; set; }
public virtual Item SecondItem { get; set; }
}

我想通过 ID 字段而不是整个“项目”类来建立与第一个和第二个项目的关系。所以:
public class ItemPair {
public int Id { get; set; }

public virtual Item FirstItem { get; set; }
public int FirstItem_Id { get; set; }

public virtual Item SecondItem { get; set; }
public int SecondItem_Id { get; set; }
}

也有效。 编辑 : 这实际上没有用。只需生成额外的 FirstItem_Id1 和 SecontItem_Id2 列。

但只需将外键属性更改为 FirstItemId、SecondItemId(不带下划线),如下所示:
public class ItemPair {
public int Id { get; set; }

public virtual Item FirstItem { get; set; }
public int FirstItemId { get; set; }

public virtual Item SecondItem { get; set; }
public int SecondItemId { get; set; }
}

导致以下异常。
{"Introducing FOREIGN KEY constraint 'ItemPair_SecondItem' on table 'ItemPair' may cause
cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION,
or modify other FOREIGN KEY constraints.\r\nCould not create constraint.
See previous errors."}

为什么?我能做些什么来避免这个异常。

最佳答案

我决定只删除级联删除约定。

 protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();

}

原因是:
  • 我更喜欢将记录标记为已删除或停用以进行审核。
  • 最多我只删除联结/映射表。
  • 使用 ORM 在我需要的极少数情况下循环和删除子记录相对简单。

  • 感谢 Ladislav Mrnka 为我指明了正确的方向。

    关于entity-framework-4.1 - Entity Framework 代码优先 : FOREIGN KEY constraint may cause cycles or multiple cascade paths,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8216711/

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