我有三个实体:document.createElement
,appendChild
和Boss
。老板有一套可以发出的指令(一对多关系),老板有一套可以发出这些指令的雇员(一对多关系)。指令可以给多个雇员使用,因此雇员与指令之间存在多对多的关系。所以这是我的实体:
Employee
目标是编写查询以获取老板的员工列表,并查看为每个指令分配了哪些员工。用这种方式进行建模的另一个原因是,我们可以强制执行唯一性约束,例如,使我们没有多次输入相同的Employee,也许我们不希望老板安排多名员工在同时。因此,这是带有通过Fluent API映射的那些关系的DbContext:
Instruction
第public class Boss
{
public int ID { get; set; }
public string Name { get; set; }
public ICollection<Instruction> Instructions { get; set; }
public ICollection<Employee> Employees { get; set; }
}
public class Employee
{
public int ID { get; set; }
public int BossID { get; set; }
public string Name { get; set; }
public DateTime WorkTime { get; set; }
public ICollection<Instruction> Instructions { get; set; }
}
public class Instruction
{
public int ID { get; set; }
public string Name { get; set; }
public int BossID { get; set;}
public ICollection<Employee> Employees { get; set; }
}
行在其中,因为否则会出现“多级联路径”错误。我想要的行为是,当我删除public class Model1 : DbContext
{
public Model1() : base("name=Model1") { }
public virtual DbSet<Boss> Bosses { get; set; }
public virtual DbSet<Instruction> Instructions { get; set; }
public virtual DbSet<Employee> Employees { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
modelBuilder.Entity<Employee>().HasMany<Instruction>(x => x.Instructions).WithMany(x => x.Employees);
modelBuilder.Entity<Boss>().HasMany<Instruction>(x => x.Instructions);
modelBuilder.Entity<Boss>().HasMany<Employee>(x =>x.Employees);
modelBuilder.Entity<Employee>().Property(x => x.BossID)
.HasColumnAnnotation(IndexAnnotation.AnnotationName,
new IndexAnnotation(new IndexAttribute("OneEmployeeAtATime", 0) { IsUnique = true }));
modelBuilder.Entity<Employee>().Property(x => x.WorkTime)
.HasColumnAnnotation(IndexAnnotation.AnnotationName,
new IndexAnnotation(new IndexAttribute("OneEmployeeAtATime", 1) { IsUnique = true }));
base.OnModelCreating(modelBuilder);
}
}
时,它也应该删除其modelBuilder.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
和Boss
,但是如果我删除Employees
或Instructions
它不应该级联。但是当我运行测试时:
Instruction
我收到此错误消息:
System.Data.Entity.Infrastructure.DbUpdateException:更新条目时发生错误。有关详细信息,请参见内部异常。 ---> System.Data.Entity.Core.UpdateException:更新条目时发生错误。有关详细信息,请参见内部异常。 ---> System.Data.SqlClient.SqlException:DELETE语句与REFERENCE约束“ FK_dbo.EmployeeInstructions_dbo.Employees_Employee_ID”冲突。数据库“ Model1”的表“ dbo.EmployeeInstructions”的列“ Employee_ID”中发生了冲突。 该声明已终止。
我是否缺少Fluent API中的某些内容?