我有默认场景,你有Category自己,RootCategory和ChildCategories.如何指定我的流畅模型构建器以在删除时级联所有子类别?
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public virtual Category RootCategory { get; set; }
public virtual ICollection<Category> ChildCategories { get; set; }
public virtual ICollection<Item> Items { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我试图使用流畅的模型构建器,但是当我尝试更新数据库时,这个会出错.
在表'类别'上引入FOREIGN KEY约束'FK_dbo.Categories_dbo.Categories_RootCategory_Id'可能会导致循环或多个级联路径.指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束.
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Category>().HasOptional(x => x.RootCategory).WithMany(x => x.ChildCategories).WillCascadeOnDelete(true);
}
Run Code Online (Sandbox Code Playgroud) c# asp.net-mvc entity-framework asp.net-mvc-4 entity-framework-5
我需要一个表格表格来保存像这样的层次结构树数据(即大陆,国家,城市)
id name parent
-------------------
1 world null
2 Europe 1
3 Asia 1
4 France 2
5 Paris 4
6 Lyon 4
Run Code Online (Sandbox Code Playgroud)
我要删除France,希望该表可以级联删除所有法国城市。但是当我像这样创建表时
create table locations
(
id int identity(1, 1),
name varchar(255) not null,
parent_id int,
constraint pk__locations
primary key clustered (id),
constraint fk__locations
foreign key (parent_id)
references locations (id)
on delete cascade
on update no action
)
Run Code Online (Sandbox Code Playgroud)
我有一个错误
在表“位置”上引入外键约束“ fk__locations”可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。
信息说
ON DELETE NO ACTION-这正是我想要的我试图在表格中建模树关系.例如,有"类别",类别本身可以在父类别中.
我的架构是:
id int PRIMARY KEY,
parent_id int,
name
Run Code Online (Sandbox Code Playgroud)
我的问题是,我应该将parent_id列标记为外键吗?外国意味着"外部"而不是自我参照.是否有不同类型的钥匙用于此目的?
我的问题类似于: MS SQL中的自引用约束,但我问的是另一个问题,级联不是问题.
sql database database-design foreign-keys foreign-key-relationship