【发布时间】:2013-10-22 18:58:09
【问题描述】:
我收到了这个错误
引入 FOREIGN KEY 约束 表“Regions”上的“FK_dbo.Regions_dbo.Countries_CountryId”可能会导致 循环或多个级联路径。指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。不能 创建约束。查看以前的错误。
我想知道这是否意味着我的数据库设计不好?我读到你关闭了级联或类似的东西,但我不确定这是否能彻底解决问题。
我只是让 EF 通过我的域类生成我的表(此时我没有使用任何数据注释或流畅的映射)。
public class Country
{
public Country()
{
this.Stores = new List<Store>();
this.Regions = new List<Region>();
Id = GuidCombGenerator.GenerateComb();
}
public Guid Id { get; private set; }
private string name;
public string Name
{
get { return name; }
set
{
name = value.Trim();
}
}
private string code;
public string Code
{
get { return code; }
set
{
code = value.Trim();
}
}
public virtual ICollection<Store> Stores { get; set; }
public virtual ICollection<Region> Regions { get; set; }
}
public class City
{
public City()
{
this.Stores = new List<Store>();
Id = GuidCombGenerator.GenerateComb();
}
public Guid Id { get; private set; }
private string name;
public string Name
{
get { return name; }
set
{
name = value.Trim();
}
}
public Guid RegionId { get; set; }
public virtual Region Region { get; set; }
public virtual ICollection<Store> Stores { get; set; }
}
public class Region
{
public Region()
{
this.Cities = new List<City>();
this.Stores = new List<Store>();
Id = GuidCombGenerator.GenerateComb();
}
public Guid Id { get; private set; }
private string state;
public string State
{
get { return state; }
set
{
state = value.Trim();
}
}
public Guid CountryId { get; set; }
public virtual ICollection<City> Cities { get; set; }
public virtual Country Country { get; set; }
public virtual ICollection<Store> Stores { get; set; }
}
public class Store
{
public Store()
{
Id = GuidCombGenerator.GenerateComb();
Users = new List<User>();
}
public Guid Id { get; private set; }
public Guid CountryId { get; set; }
public Guid CityId { get; set; }
public Guid RegionId { get; set; }
public virtual City City { get; set; }
public virtual Country Country { get; set; }
public virtual Region Region { get; set; }
public virtual ICollection<User> Users { get; set; }
}
会不会是商店的原因?
【问题讨论】:
-
你能告诉我们所涉及的表,它们的结构是什么,最重要的是:它们之间的 FK 约束是如何设置的?所以你想在地区和国家之间建立一个级联删除,这样如果一个国家被删除,它的所有地区都被删除?听起来很合理 - 问题是:为什么这会导致循环?您还有哪些其他具有级联删除功能的 FK 约束?
-
好的,我更新了它以显示这些区域,我还没有生成任何表格,因为我先编写代码。
-
不幸的是,您没有向我们展示
Store类 .... 我也没有看到任何定义级联删除的代码 ... -
我没有定义级联的代码,我只是创建了我的类并希望 EF 生成所有内容。如果我需要一些额外的 tweeking,那么我会制作那些流畅的映射东西。商店已发布。
标签: entity-framework cascading