我遇到了一个关系问题,我想如何使用实体框架。情况如下。实体框架添加现有外键
店内有多个部门;食品,饮料,娱乐等。
有一些员工在商店工作。员工可以在一个或多个部门工作。
的类我已经是:
public class Department
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
public ICollection<EmployeeDeparmentMapping> DeparmentMappings { get; set; }
}
public class EmployeeDeparmentMapping
{
public int Id { get; set; }
public Employee Employee { get; set; }
public Department Department { get; set; }
}
我第一次使用的代码和我的模型构建器看起来像这样
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Employee>().HasMany(e => e.DeparmentMappings).WithRequired(e => e.Employee);
modelBuilder.Entity<EmployeeDeparmentMapping>().HasRequired(edm => edm.Department);
}
我有一个问题,当我尝试添加EmployeeDeparmentMappings,像这样:
public void SomeMethod(EmployeeDeparmentMapping edm)
{
MyDbContext myDb = new MyDbContext();
myDb.EmployeeDepartmentMappings.Add(emd);
myDb.SaveChanges();
}
被抛出的异常是在Dep上的PRIMARY KEY违例artment表,这是因为EmployeeDepartmentMappings对象中的部门可能已经存在于数据库中,但不在DbContext中。
我试过如下:
public void SomeMethod(EmployeeDeparmentMapping edm)
{
MyDbContext myDb = new MyDbContext();
myDb.Departments.Attach(emd.Department);
myDb.EmployeeDepartmentMappings.Add(emd);
myDb.SaveChanges();
}
但这抛出InvalidOperationException
,将更改保存到数据库,但上下文显然打破。
An exception of type 'System.InvalidOperationException' occurred in EntityFramework.SqlServer.dll but was not handled in user code
Additional information: The changes to the database were committed successfully, but an error occurred while updating the object context. The ObjectContext might be in an inconsistent state. Inner exception message: A referential integrity constraint violation occurred: The property values that define the referential constraints are not consistent between principal and dependent objects in the relationship.
我在做什么错在这里?
是否可以从所引发的'InvalidOperationException'发布完整的错误信息? –
现在没有多少时间来解释,但试着在'EmployeeDeparmentMapping'虚拟中创建'Employee'和'Department'。 –
@nintendojunkie,添加到问题的感谢。 –