C# 批量方法的实体框架和泛型
我已经将一个应用程序从Linq迁移到Sql,再迁移到实体框架 我们使用此应用程序在两个sql Server之间同步注册表 当我们使用linktosql时,我们可以使用一些批量操作,比如 以下代码段:C# 批量方法的实体框架和泛型,c#,entity-framework,generics,entity-framework-5,C#,Entity Framework,Generics,Entity Framework 5,我已经将一个应用程序从Linq迁移到Sql,再迁移到实体框架 我们使用此应用程序在两个sql Server之间同步注册表 当我们使用linktosql时,我们可以使用一些批量操作,比如 以下代码段: List<MyTable> listaMyTable = (from p in db1_context.MyTable select p).ToList(); db1_context.MyT
List<MyTable> listaMyTable = (from p in db1_context.MyTable
select p).ToList();
db1_context.MyTable.InsertAllOnSubmit(listaMyTable );
并创建一个泛型方法,该方法遍历实体并为列表中的每个类型创建对象集
所以我可以用这种方法
dbContext.InsertAllEntities(EntitiesList);
我不知道我是否讲清楚了。如果需要更多信息,请询问。您可以使用动态数据类型在运行时解析每个ILST的T类型
public static void InsertAllListsOnSubmit(
this ObjectContext db, IList<IList<object>> lists)
{
foreach (IList<object> list in lists)
{
if (list.Count > 0)
{
dynamic instance = list[0];
db.InsertAllOnSubmit(instance, list);
}
}
}
并将方法签名更改为获取T的虚拟实例
public static int InsertAllOnSubmit<T>(
this ObjectContext db, T instance, IList<T> newentities)
where T : EntityObject
{
var objectSet = db.CreateObjectSet<T>();
newentities.ForEach(x => objectSet.AddObject(x));
int inserted = db.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
return inserted;
}
是否要创建一个从所有表加载所有数据的方法?或者我误解了吗?嗯,除非你用你的基本类型来表示t,否则这不适合列在列表中,但是因为你不能访问你的属性,所以这个列表将是无用的。是的,这就是为什么我不知道如何实现这一点。不知道我该怎么做:/I我不知道如何通过泛型实现,因为类型不匹配。从2分钟的思考来看,实现这一点的唯一方法是创建一个列表,然后使用反射来确定类型和访问属性,但这将是最糟糕的做法。
dbContext.InsertAllEntities(EntitiesList);
public static void InsertAllListsOnSubmit(
this ObjectContext db, IList<IList<object>> lists)
{
foreach (IList<object> list in lists)
{
if (list.Count > 0)
{
dynamic instance = list[0];
db.InsertAllOnSubmit(instance, list);
}
}
}
public static int InsertAllOnSubmit<T>(
this ObjectContext db, T instance, IList<T> newentities)
where T : EntityObject
{
var objectSet = db.CreateObjectSet<T>();
newentities.ForEach(x => objectSet.AddObject(x));
int inserted = db.SaveChanges(SaveOptions.AcceptAllChangesAfterSave);
return inserted;
}