我遇到了实体框架(EF4.1 - CodeFirst)的问题
它基本上是复制子对象......
对象模型是作业中的许多任务 - >任务有一个TaskType,TaskType有许多状态...
起初它是在保存
上复制TaskTypes然而,在我添加它之后,它停止了复制TaskTypes ......
context.Entry(task.TaskType).State = EntityState.Unchanged;
所以我尝试了这个状态......
//tried this but it errors
foreach (var status in task.TaskType.Statuses)
{
context.Entry(status).State = EntityState.Unchanged;
}
////
但是以下错误......
“存储更新,插入或删除语句影响了意外的行数(0)。实体可能已被修改或删除,因为实体已加载。刷新ObjectStateManager条目。”
完整的代码......(为了便于阅读,修改了一些获取的代码)
using(var context = new JobContext())
{
var job = //Get with Includes;
job.Tasks.Add(task);
context.Jobs.Attach(job);
context.Entry(task.TaskType).State = EntityState.Unchanged;
//tried this but it errors
foreach (var status in task.TaskType.Statuses)
{
context.Entry(status).State = EntityState.Unchanged;
}
////
context.SaveChanges();
}
有人可以帮忙吗?
答案 0 :(得分:1)
using(var context = new JobContext())
{
var job = //Get with Includes;
context.Jobs.Attach(job);
// can be omitted if "Get with Includes" happens in the same context
context.TaskTypes.Attach(task.TaskType);
// attaches TaskType and all Statuses -> State is Unchanged
job.Tasks.Add(task);
// A new task will be created after SaveChanges. If you don't want that
// replace Attach(task.TaskType) above by Attach(task)
context.SaveChanges();
}
顺便说一下,您不需要加载Include
。您可以在没有Include
的情况下加载(然后创建一个空集合job.Tasks = new List<Task>()
)。