У меня есть репозиторий CRUD:
public class CrudRepository<T> : ICrudRepository<T>
where T : class, IUnique
{
static DataContext db = new DataContext();
protected DataContext DataContext { get { return db; } }
public virtual IQueryable<T> GetAll()
{
return db.GetTable<T>();
}
public virtual void Add(T item)
{
db.GetTable<T>().InsertOnSubmit(item);
}
public virtual void Save()
{
db.SubmitChanges();
}
public virtual T Get(int id)
{
return GetAll().FirstOrDefault(t => t.Id.Equals(id));
}
}
Я использую статический контекст данных для всех экземпляров вне репозитория. Я хочу изменить сущность внешнего ключа, поэтому попробую следующее решение:
CrudRepository<Employee> employeeRepository = new CrudRepository<Employee >();
Employee employee = employeeRepository.Get(employeeId)
employee.OfficeId = officeId;
employeeRepository.Save();
Но это вызывает следующее исключение:
ForeignKeyReferenceAlreadyHasValueException
Итак, я пытаюсь найти второе решение:
CrudRepository<Employee> employeeRepository = new CrudRepository<Employee >();
Employee employee = employeeRepository.Get(employeeId)
employee.Office = new CrudRepository<Office>().Get(officeId);
employeeRepository.Save();
Но он генерирует исключение с следующим сообщением:
Была сделана попытка прикрепить или добавить объект, который не является новым, возможно, загруженный из другого DataContext.
что я могу сделать? в чем проблема?