我有以下实体模型:
我添加了一堆任务并开始处理这些任务。每个任务完成后,我想记录有关它的信息。
我使用以下代码执行此操作:
TASK scheduledTask = entities.TASKs.First(x => x.TASK_NAME == e.ClassName);
scheduledTask.NEXT_RUN = e.NextRun;
entities.SaveChanges();
TASK_LOG logMsg = new TASK_LOG()
{
TASK = scheduledTask,
MESSAGE = e.TaskResult.Message,
STATUS = e.TaskResult.Status ? "Successful" : "Failure",
TIMESTAMP = e.CompletedTime
};
entities.TASK_LOG.AddObject(logMsg);
entities.SaveChanges();
但是,我收到一个异常,说明我无法修改TASK_LOG对象的ID属性。我没有看到我的代码将如何修改logMsg
对象ID属性。
注意:两个实体中的ID属性由数据库生成,并设置为StoreGeneratedPattern
- Identity。
修改
第二次运行 - 现在我收到有关在第一次SaveChanges
电话上打开/启用连接的错误。
第3次运行 - 获取错误存储更新,插入或删除语句会影响意外的行数(0)。在最后一次SaveChanges
电话会议上。
这种错误的不一致使得很难修复。
答案 0 :(得分:0)
我怀疑问题可能是因为您在通过AddObject附加到上下文之前设置了logMsg.TASK属性。由于您可以访问外键,因此我建议使用TASK_ID属性而不是TASK导航属性创建引用。请尝试将此代码替换为logMsg:
TASK_LOG logMsg = new TASK_LOG()
{
TASK_ID = scheduledTask.ID,
MESSAGE = e.TaskResult.Message,
STATUS = e.TaskResult.Status ? "Successful" : "Failure",
TIMESTAMP = e.CompletedTime
};