У меня возникла проблема с получением отношения к работе, как хотелось бы с Entity Framework. Ситуация такова.Entity Framework Добавляет существующий внешний ключ
В магазине есть несколько отделов; еда, напитки, развлечения и т. д.
В магазине есть несколько сотрудников. Сотрудникам разрешается работать в одном или нескольких отделах.
Классов я являюсь:
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; }
}
Я использую код первый и мой ModelBuilder выглядит что-то вроде этого
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 Это связано с тем, что отдел в объекте 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', выбрасываемого ? –
Не так много времени для объяснения, но попробуйте сделать 'Employee' и' Department' в 'EmployeeDeparmentMapping' виртуальным. –
@nintendojunkie, добавленный к вопросу спасибо. –