データ転送オブジェクトを使用して、エンティティフレームワークとビジネスレイヤとユーザーレイヤ間でデータを転送します。 DTOに変換されるオブジェクトを取得すると、エンティティフレームワーク内の正しいオブジェクトを更新するだけで、重複を挿入するのではなく、どのようにしてオブジェクトを更新するのですか?エンティティフレームワークオブジェクトを更新する
24
A
答えて
2
DTOにプライマリまたは代替キーを含め、更新時にそのキーを正しいEFエンティティに戻す必要があります。
7
古い質問が、念のために誰かがコードソリューションを必要とします:
例:
public void EditArticle(
Article article, string articleTypeId, string[] categoryId)
{
var id = 0;
Article art = de.ArticleSet
.Include("ArticleTypes")
.Include("Categories")
.Where(a => a.ArticleID == article.ArticleID)
.First();
var count = art.Categories.Count;
for (var i = 0; i < count; i++)
{
art.Categories.Remove(art.Categories.ElementAt(i));
count--;
}
foreach (var c in categoryId)
{
id = int.Parse(c);
Category category = de.CategorySet
.Where(ct => ct.CategoryID == id).First();
art.Categories.Add(category);
}
art.Headline = article.Headline;
art.Abstract = article.Abstract;
art.Maintext = article.Maintext;
art.DateAmended = DateTime.Now;
art.ArticleTypesReference.EntityKey = new EntityKey(
"DotnettingEntities.ArticleTypeSet",
"ArticleTypeID",
int.Parse(articleTypeId)
);
de.SaveChanges();
}
28
次のコードのように作成されているEF 4エンティティを更新しますMVCの強力な型付けされたビューからのコントローラパラメータ:
これは、ObjectStateManagerを使用して状態f romエンティティがコンテキストに追加されると、Modifiedに追加されました。 @Seanミルズコメントを1として
MyEntities db = new MyEntities();
db.Product.AddObject(product);
db.ObjectStateManager.ChangeObjectState(product, System.Data.EntityState.Modified);
return db.SaveChanges() > 0;
あなたはEF5の使用を使用している場合:
((IObjectContextAdapter) db).ObjectContext.ObjectStateManager.ChangeObjectState(entity, System.Data.EntityState.Added);
4
//I am replacing player :)
public ActionResult ProductEdit(string Id, Product product)
{
int IdInt = DecyrptParameter(Id);
MyEntities db = new MyEntities();
var productToDetach = db.Products.FirstOrDefault(p=> p.Id == IdInt);
if (product == null)
throw new Exception("Product already deleted"); //I check if exists, maybe additional check if authorised to edit
db.Detach(productToDetach);
db.AttachTo("Products", product);
db.ObjectStateManager.ChangeObjectState(product, System.Data.EntityState.Modified);
db.SaveChanges();
ViewData["Result"] = 1; // successful result
return View();
}
2
をこれは、EF 5のために働く必要があります:https://stackoverflow.com/a/11749716/540802:
最後にdb.Entry(product).State = EntityState.Modified;
関連する問題
- 1. ADO.Netエンティティフレームワークオブジェクトのナビゲーション?
- 2. エンティティフレームワークオブジェクトに対応する非データベースクラスを追加します。
- 3. 単一のエンティティフレームワークオブジェクトを辞書に変換する
- 4. エンティティフレームワークオブジェクトをメモリから取り出します
- 5. エンティティフレームワークオブジェクトを検証するモデルとして表示する方法は?
- 6. 更新コードをクラウドコードで更新する
- 7. データベースの更新ページを更新する
- 8. ページを更新する/更新しないレコードを更新する
- 9. VBA:グラフ軸を更新するセルを更新する
- 10. MVCフォーム投稿を更新する画像を更新する
- 11. 更新する複数のSQLクエリを更新する
- 12. オブジェクト更新時に更新するVueを取得する
- 13. JavaScriptで更新するキャンバス描画を更新する
- 14. リストを更新するときに更新する
- 15. UITableViewを更新するセルのクラスから更新する
- 16. 最新バージョンのアンドロイドアプリを更新する
- 17. すべてのユーザーデータを更新するMySQLクエリの更新
- 18. すべてのレコードを更新するGridVewの更新コマンド
- 19. GCCを更新せずにgfortranを更新する
- 20. ページを更新せずにURLを更新する
- 21. 更新パネル、ファイルをアップロード中にページを更新する
- 22. 元のオブジェクトを更新せずにJsonPath DocumentContextを更新する
- 23. 更新を失わずにショッピングカートを更新する
- 24. 複数の行を更新する文を更新
- 25. 更新ページを更新せずにajaxでカートをカスタマイズする
- 26. [カートを更新]ボタンに頼らずにショッピングカートを更新する
- 27. Ajaxでページを更新しないビューを更新する
- 28. Firebaseで値を更新した後にテーブルビューを更新する
- 29. UITableViewCellを更新するUIを更新しない
- 30. データベースを更新した後にredisを更新するには?
!私は他の回避策で多くの時間を無駄にしました。これは更新するときにdbObject.Property = passedObject.Propertyをすべてのプロパティに対して実行する必要がなくてすごく効果的です。 – kape123
ObjectStateManagerがコンテキストのプロパティでない場合try((System.Data.Entity.Infrastructure.IObjectContextAdapter)db).ObjectContext http://stackoverflow.com/a/8968643/678338 –