0
更换实体模型属性我有两个实体的实体框架对象模型:与价值从数据库
Alert (1-*) ----- (1) Check
的Check
表在列UniqueProperty
的唯一约束。
检查通常是我的数据库中预先存在的实体,任何新的警报都应该添加到现有检查中。
我在我的代码的地方创建一个简单的对象图:
var alert = new Alert();
alert.Check = new Check { UniqueProperty = someValue };
一段时间后,我想我坚持的对象图:
using (var context = new MyContext())
{
context.Alerts.AddObject(alert);
// Replace temp check with actual database check if available.
var checkFromDb = context.Checks.SingleOrDefault(
c => c.UniqueProperty = alert.Check.UniqueProperty);
if (checkFromDb != null)
{
alert.Check = checkFromDb;
}
context.SaveChanges();
}
所以,当有一个相应的检查数据库,使用那个,否则什么都不做(并且它将被简单地添加)。
上面的代码在UniqueProperty
约束条件下会导致唯一的约束违规。原因是EF记住了第一次检查,即使我稍后用数据库中的检查来替换它。
我该如何摆脱第一次检查?
嗯,这肯定会解决这个问题,但我需要'Alert'中的'Check'从头开始。我创建的对象图是可能需要几分钟才能完成的向导的对象模型。只有在最后我才能保存整个图表。 – 2012-03-07 14:27:09
@RonaldWildenberg,那么我可以建议的唯一事情是,如果它存在,你就可以在开始时获得它。 – tvanfosson 2012-03-07 14:29:43
这也可能是一个问题,因为该应用程序是多用户。在一个向导启动时存在的检查可能与向导结束时存在的检查不同,因为另一个用户可能导致了更多的检查被创建...... – 2012-03-07 14:44:09