当实体属性发生变化时,更新的正确方法是什么?例如,我有一个名为Application的实体。应用程序具有属性List< TaskBases>。运行我的应用程序时,Application没有任何TaskBases。我只需要知道当用户向其添加TaskBase时如何保存此列表。
Save()方法的第一行是新的。我试过它是因为我在研究时发现了它。
public void Save(Application application)
{
// This line didn't work. See error below this code snippet.
this.Database.Entry(application).Property(app => app.Tasks).IsModified = true;
this.SaveChanges<Application>(application);
}
protected void SaveChanges<T>(T entity) where T : EntityBase
{
this.Database.Entry<T>(entity).State = GetState(entity);
this.Database.SaveChanges();
}
我收到此错误: “类型'Application'上的属性'Tasks'不是原始属性或复杂属性.Property方法只能用于原始或复杂属性。使用Reference或Collection方法。”
然后我尝试使用Reference和Collection,但是我没有在intellisense中看到任何可以帮助我的东西。
注意:当我第一次尝试在Save()中没有第一行的情况下进行保存时,任务列表中的项目没有显示在数据库中。
我有一种感觉,我正在变得比它需要的更难。我有一个实体,一个用户添加另一个实体,作为列表的一部分,我想要保存。我错过了什么?该怎么做?
修改
当我将Save()方法更改为此方法时,它起作用了:
public void Save(Application application)
{
foreach (TaskBase taskBase in application.Tasks)
{
this.Database.Entry<TaskBase>(taskBase).State = GetState(taskBase);
}
this.SaveChanges<Application>(application);
}
这是必须做的吗?这是正确的方法吗?
答案 0 :(得分:0)
执行更新的常规方法如下:
using(var context = new MyDbContext())
{
var app = context.Applications.Single(a=>a.Id == theAppIdImInterestedIn);
app.Tasks.Add(new Task{ Name = "some other data" });
context.SaveChanges();
}
如果你想用一个DI容器管理它的生命周期,可以将你的上下文分开一点。