Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 批量方法的实体框架和泛型_C#_Entity Framework_Generics_Entity Framework 5 - Fatal编程技术网

C# 批量方法的实体框架和泛型

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

我已经将一个应用程序从Linq迁移到Sql,再迁移到实体框架

我们使用此应用程序在两个sql Server之间同步注册表

当我们使用linktosql时,我们可以使用一些批量操作,比如

以下代码段:

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;
}