实体框架中的自定义InserAllOnSubmit

时间:2011-07-29 19:31:43

标签: asp.net asp.net-mvc entity-framework entity-framework-4

我刚刚从L2S转移到EF 4.在L2S中,我大量使用了datacontext的InsertAllOnSubmit方法,但在EF中,似乎没有这样的方法可用。我已经在ObjectContext上编写了这个通用的扩展方法

public static void InsertAllOnSubmit<T>(this ObjectContext db, List<T> newentities) where T:EntityObject
        {
            var objectSet = db.CreateObjectSet<T>();
            newentities.ForEach(x => objectset.AddObject(x));
        }

我想知道使用这种方法的缺陷是什么。我可以猜到的是,有一些与CreateObjectSet<T>()相关联的演员表。但是,我不知道创建对象集会产生多少成本加上我想知道这个方法会产生什么其他不良影响 感谢

2 个答案:

答案 0 :(得分:2)

当谈到这样的性能问题时,你真正确定成本的唯一方法就是做一个测试。我可能是错的,但我敢打赌,Linq to Sql调用InsertAllOnSubmit正在执行类似于foreach循环的操作,一次添加一个实体。只有这样才能说出像反射器这样的东西来查看.net框架的代码。

确定给定代码段的成本的唯一真正方法是进行一些测试。如果您担心db.CreateObjectSet的成本,请尝试创建另一个利用实际EF DataContext的方法,并通过一些压力测试运行。这会让你知道你的上述方法有多贵。

答案 1 :(得分:2)

不确定为什么要尝试重写实体框架,已经支持它在ef中以不同的方式完成。例如,您可以简单地将对象添加到记录集合中并调用SaveChanges(),框架将保存所有更改,包括在调用此处时编辑插入和删除