私はEF 4.1データベースファーストを使用しています
「エンティティタイプList`1は現在のコンテキストのモデルの一部ではありません」を取得しています。編集ビューからレコードを更新しようとするとエラーが発生します。
エラーが発生している
db.Entry(properties).State = EntityState.Modified;
これが私のモデルです:
public class Users
{
[Key]
public int User_ID { get; set; }
public string UserName { get; set; }
[NotMapped]
public IEnumerable<App_Properties> User_Properties
{
get { return Properties.Where(u => u.User_ID == User_ID); }
}
public virtual ICollection<App_Properties> Properties { get; set; }
}
public class App_Properties
{
[Key]
public int Prop_ID { get; set; }
public int User_ID { get; set; }
public int App_ID { get; set; }
public string Key { get; set; }
public string Value { get; set; }
public DateTime DateEntered { get; set; }
public DateTime DateModified { get; set; }
[ForeignKey("User_ID")]
public virtual Users Users { get; set; }
}
これが私のコントローラーです:
[HttpPost]
public ActionResult Edit(ICollection<App_Properties> properties)
{
if (ModelState.IsValid)
{
foreach (var item in properties)
{
db.Entry(properties).State = EntityState.Modified;
}
db.SaveChanges();
return RedirectToAction("Index");
}
return View(properties);
}
Foreachループは、ICollectionの各項目のEntityStateを設定するのに適切ではないようです。
どんな援助も大歓迎です。
ループを次のように変更してみてください:
_foreach (var item in properties)
{
db.Entry(item).State = EntityState.Modified;
}
_
db.Entry(properties)
を呼び出していたため、コレクション全体を一度にアタッチしようとしました。 DbContext.Entry(object) 単一のオブジェクトが必要です 、コレクションではありません。
回答をありがとう、リーニエンシー。よく働きました。
価値があるので、私はEntityState.Modified
単一行の割り当て(私は複数あるため)のため、次のLINQを使用しました:
properties.ForEach(p => db.Entry(p).State = EntityState.Modified);
この問題にこのコードを使用できると思います。それを使用すると、別の問題が発生するからです。今、私は私の問題を修正し、それがあなたのためにうまくいくことを願っています
foreach (var item in properties)
{
var oldEntity = FGetById(item.Id); // You can use find instead of FGetById
context.Entry(oldEntity).CurrentValues.SetValues(item);
Update(oldEntity);
}
コードファーストEFを使用しているにもかかわらず、結局ここに到達しました。私にとっての問題の答えは、エンティティのリストをinsertメソッドに渡そうとするのではなく、一度に1つずつエンティティを挿入することでした。
entityList.ForEach(context.Insert);