データベースからレコードを更新する単純なMVCアプリケーションを開発していました。私はオブジェクトが別のクラスから返されたときにEntity Frameworkに変更を保存できません
Student.cs以下
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
namespace WebApplication1.DAL
{
public class Student
{
DemoDatabaseEntities db = new DemoDatabaseEntities();
public Student_Mast getStudentByID()
{
Student_Mast student = db.Student_Mast.Where(i => i.StudID == 1).FirstOrDefault();
return student;
}
}
}
とStudentController.csなどの記録や更新を取得するためにBALとコントローラを使用しました
public class UpdateController : Controller
{
DemoDatabaseEntities db = new DemoDatabaseEntities();
Student _bal = new Student();
/GET: Update
public ActionResult Index()
{
Student_Mast model = new Student_Mast();
model = _bal.getStudentByID();
model.First_Name = "Hardik";
model.Last_Name = "Gondalia";
db.SaveChanges();
return View();
}
}
しかしdb.savechanges()のdoesnレコードを更新しません。これに代えて
私は以下のようにレコードを更新する場合は、あなたのDbContextの別のインスタンスからレコードを取得しているので、それは
StudentController.cs
public class UpdateController : Controller
{
DemoDatabaseEntities db = new DemoDatabaseEntities();
Student _bal = new Student();
/GET: Update
public ActionResult Index()
{
Student_Mast model = new Student_Mast();
model = db.Student_Mast.Where(i => i.StudID == 1).FirstOrDefault();
model.First_Name = "Hardik";
model.Last_Name = "Gondalia";
db.SaveChanges();
return View();
}
}
あなたのコードもdb.Entry(モデル).State = EntityState.Modified私のために動作します。しかし、ベストプラクティスは何ですか? –
@UbiquitousDevelopers複数のコンテキストを管理するのは難しいため、すべてのデータフェッチサービスに依存するコンテキストを渡すことをお勧めします。私はちょうどあなたのコードが正確に動作していなかった理由を示します – hmnzr