当前位置:  开发笔记 > 数据库 > 正文

如何在不首先加载对象的情况下从Entity Framework模型中删除对象?

如何解决《如何在不首先加载对象的情况下从EntityFramework模型中删除对象?》经验,为你挑选了2个好方法。

我很确定我已经在某个地方看到了这个问题的答案,但是由于我在SO或谷歌上搜索了几次,我无论如何都要问它...

在Entity Framework中,删除数据对象的唯一方法似乎是

MyEntityModel ent = new MyEntityModel();
ent.DeleteObject(theObjectToDelete);
ent.SaveChanges();

但是,这种方法需要首先将对象加载到Controller,只是为了删除它.有没有办法删除仅引用其ID的业务对象?

如果使用Linq或Lambda表达式有更聪明的方法,那也没关系.但主要目的是避免加载数据只是为了删除它.



1> John Wigger..:

值得了解的是,Entity Framework同时支持Linq to Entities和Entity SQL.如果您发现自己想要删除或更新可能会影响许多记录,您可以使用等效的ExecuteNonQuery.

在Entity SQL中,这可能看起来像

   Using db As New HelloEfEntities

        Dim qStr = "Delete " & _
                  "FROM Employee"
        db.ExecuteStoreCommand(qStr)
        db.SaveChanges()
    End Using

在这个例子中,db是我的ObjectContext.另请注意,该ExecuteStoreCommand函数采用可选的参数数组.


为什么在ExecuteStoreCommand之后调用SaveChanges?
魔术弦!啊.
这个答案直接指向了提问者想要做的事情,应该被标记为已接受的答案.其他解决方案,如从无到有构建实体,不太理想.另请查看http://msdn.microsoft.com/en-us/library/ee358769.aspx
这不是一个好的答案.它打开您的代码以进行可能的SQL注入.并且您没有EF的两大优势之一:语法检查编译时间.

2> Tomas Aschan..:

我发现这篇文章,其中指出没有更好的方法来删除记录.给出的解释是,该记录唯一的所有外键,关系等也被删除,因此EF需要有关于记录的正确信息.我很困惑的是,为什么在没有来回加载数据的情况下无法实现这一点,但由于它不会经常发生,我已经决定(现在)我不会打扰.

如果您确实有这个问题的解决方案,请随时告诉我=)


使用存储过程怎么样?
推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有