0
我有4个班实体框架级联删除 - 循环或多个级联路径
- 组件 - 包含的类和接口
- 类信息,接口 - 两者都含有的方法 名单
- 方法
每个组分包含更多类和接口,每个类和接口具有更方法。
如果我删除组件我还需要去除类,接口及其方法。你能给我一个提示如何配置OnModelCreating为了解决这个问题?具有方法对于类和接口似乎有问题。
我得到这个错误:
Introducing FOREIGN KEY constraint 'Interface_Methods' on table 'Methods' 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.
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Component>().
HasMany(t => t.Classes).
WithOptional().
WillCascadeOnDelete();
modelBuilder.Entity<Component>().
HasMany(t => t.Interfaces).
WithOptional().
WillCascadeOnDelete();
modelBuilder.Entity<Class>().
HasMany(t => t.Methods).
WithOptional().
WillCascadeOnDelete();
modelBuilder.Entity<Interface>().
HasMany(t => t.Methods).
WithOptional().
WillCascadeOnDelete();
modelBuilder.Conventions.Remove<ForeignKeyAssociationMultiplicityConvention>();
base.OnModelCreating(modelBuilder);
}
组件:
public class Component
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public virtual List<Class> Classes { get; set; }
public virtual List<Interface> Interfaces { get; set; }
public Component()
{
Classes = new List<Class>();
Interfaces = new List<Interface>();
}
}
类:
public class Class
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public virtual List<Method> Methods { get; set; }
public Class()
{
Methods = new List<Method>();
}
}
接口:
public class Class
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
public virtual List<Method> Methods { get; set; }
public Class()
{
Methods = new List<Method>();
}
}
方法:
public class Method
{
[Key]
public int Id { get; set; }
public string Name { get; set; }
}