私は休閑中の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
だから私は2番目の解決策を休ませてみます:
CrudRepository<Employee> employeeRepository = new CrudRepository<Employee >();
Employee employee = employeeRepository.Get(employeeId)
employee.Office = new CrudRepository<Office>().Get(officeId);
employeeRepository.Save();
しかし、それは休眠メッセージで例外をスローします:
おそらく別のDataContextからロードされた、新しいものではないエンティティをアタッチまたは追加しようとしました
私に何ができる?何が問題ですか?