我已将应用程序从 Linq To Sql 迁移到实体框架。
我们使用此应用程序在两个 sql 服务器之间同步注册表。
当我们使用 Link to sql 时,我们可以使用一些批量操作,例如
以下片段:
List<MyTable> listaMyTable = (from p in db1_context.MyTable
select p).ToList();
db1_context.MyTable.InsertAllOnSubmit(listaMyTable );
这允许我们将寄存器从 databaseContext1 批量插入到 databaseContext2
将应用程序迁移到 Entity Framework 5 后,我发现没有可用的批量操作,因此我决定创建一些像这样的通用方法:
public static int InsertAllOnSubmit<T>(this ObjectContext db, List<T> newentities) where T : EntityObject
{
var objectSet = db.CreateObjectSet<T>();
newentities.ForEach(x => objectSet.AddObject(x));
int inserted = db.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
return inserted;
}
public static int DeleteAllOnSubmit<T>(this ObjectContext db, List<T> deleteEntities) where T : EntityObject
{
var DelSet = db.CreateObjectSet<T>();
deleteEntities.ForEach(x => DelSet.DeleteObject(x));
int deleted= db.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
return deleted;
}
所以我可以使用以下方法进行几乎相同的操作:
//Using AsNoTracking to disable tracking between contexts
List<MyTable> listaMyTable = (from p in db1_context.MyTable.AsNoTracking()
select p).ToList();
db2_context.InsertAllOnSubmit(listamyTable);
我想知道它们是否可以通过泛型实现,就像我做过的一样,但是加载了类似的东西,List<List<T>>
这样我就可以迭代所有表并进行批量操作。
会是这样的
EntitiesList.add(Entity);
EntitiesList.add(Entity2);
EntitiesList.add(Entity3);
并创建一个遍历实体并为列表中的每种类型创建 ObjectSet 的通用方法。
所以我可以像这样的方法
dbContext.InsertAllEntities(EntitiesList);
我不知道我是否说清楚了。如果您需要更多信息,请询问。