是否可以强制EF取消提交以防依赖实体不再存在?

时间:2013-01-11 07:38:01

标签: c# .net entity-framework

我想在EntityFrameWork中的另一个实体的现有基础上创建一个新实体。

例如,如果Db中存在ID = 999的fooEntity,我想创建barEntity对象:

var fooEntity =GetFooByID(999);

if (fooEntity != null)
{
  var barEntity = new Bar()
        {
            Sweetness = 8,
            Bitterness = 5,
            // goes on...
        }

 SaveBarEntity(barEntity); 
}

我担心的是当我调用SaveBarEntity(barEntity)时fooEntity不再存在;

问题: 是否有可能以某种方式强制EntityFramework,以便如果在保存时Db中不存在fooEntity,它应该抛出异常?

(对我来说,这听起来像是将fooEntity作为'工作单元'的一部分。但它是如何在实体框架中实现的?)

2 个答案:

答案 0 :(得分:1)

我认为,由于数据库中FooBar之间没有关系,唯一的方法是为Bar表创建插入和更新数据库触发器以检查是否相关{ {1}}实体存在。 为了将相关的Foo实体Id传递给数据库,您需要修改EF的保存行为以将ID传递给DB的上下文。

这真的需要很多努力;我认为在您的模型中创建FooFoo之间的关系会更好(这似乎是一种正确的方式,因为看起来Foo和Bar之间存在关系)。

答案 1 :(得分:0)

这是不必要的工作,但您可以对Foo记录执行更新。

var fooEntity =GetFooByID(999);

if (fooEntity != null) {
    var barEntity = new Bar() {
        Sweetness = 8,
        Bitterness = 5,
        // goes on...
    };

    SaveBarEntity(barEntity); 
    SaveFooEntity(fooEntity); // If necessary, do something to make sure EF performs an update
}