Entity Framework でエンティティを更新するのに苦労しています。
シナリオ: - new DbContext().GetById(guid) でエンティティをロードします - 拡張メソッドを使用してこのエンティティを保存しようとし、次に new DbContext() を使用します
私の更新方法は次のとおりです。
public virtual void Update(IEntity entityToUpdate)
{
var dbEntry = Context.Entry(entityToUpdate);
if (dbEntry == null) return;
if (Context.Entry(entityToUpdate).State == EntityState.Detached)
DbSet.Attach(entityToUpdate);
else
{
dbEntry.CurrentValues.SetValues(entityToUpdate);
Context.Entry(entityToUpdate).State = EntityState.Modified;
}
Context.SaveChanges();
}
これは私の試みのコレクションです。SetValues を使用すると、エンティティがデタッチされているため不可能であると通知され、アタッチを使用すると、次のエラーが表示されます。ObjectStateManager は、同じキーを持つ複数のオブジェクトを追跡できません。
私は明らかに根本的に間違ったことをしています。誰かが正しい方向に私を助けてくれますか?
アップデート:
protected void TransferClubs(object sender, EventArgs e)
{
var clubHelper = new ClubHelper();
var club = clubHelper.GetClub(new Guid("A009D0CD-71C4-42E8-88E2-037F059B12EE"));
club.AddUser(Guid.NewGuid(), ClubRoleType.Admin);
club.AddUser(Guid.NewGuid(), ClubRoleType.Admin);
club.Save();
}
public static bool Save(this ClubItem item)
{
var clubHelper = new ClubHelper();
clubHelper.AddOrUpdate(item);
return true;
}
public ClubItem AddOrUpdate(ClubItem item)
{
if (item.Id == Guid.Empty)
Insert(item);
else
Update(item);
return item;
}
そして、私の元の投稿に表示される Update() メソッド...