Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.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# 如何动态地将数据集对象转换为ObjectContext(实体框架)对象?_C#_Entity Framework_Dataset_Objectcontext - Fatal编程技术网

C# 如何动态地将数据集对象转换为ObjectContext(实体框架)对象?

C# 如何动态地将数据集对象转换为ObjectContext(实体框架)对象?,c#,entity-framework,dataset,objectcontext,C#,Entity Framework,Dataset,Objectcontext,我有一个现有的SQL Server数据库,我在其中存储来自大型特定日志文件(通常为100 MB或更多)的数据,每个数据库一个。经过一些分析后,数据库再次被删除 从数据库中,我通过VisualStudio设计器创建了实体框架模型和数据集模型。数据集仅用于在经过相当复杂的解析过程后,使用SqlBulkCopy批量导入数据。然后使用实体框架模型完成所有查询,其CreateQuery方法通过如下接口公开 public IQueryable<TTarget> GetResults<

我有一个现有的SQL Server数据库,我在其中存储来自大型特定日志文件(通常为100 MB或更多)的数据,每个数据库一个。经过一些分析后,数据库再次被删除

从数据库中,我通过VisualStudio设计器创建了实体框架模型和数据集模型。数据集仅用于在经过相当复杂的解析过程后,使用
SqlBulkCopy
批量导入数据。然后使用实体框架模型完成所有查询,其
CreateQuery
方法通过如下接口公开

    public IQueryable<TTarget> GetResults<TTarget>() where TTarget : EntityObject, new()
    {
        return this.Context.CreateQuery<TTarget>(typeof(TTarget).Name);
    }
这是一项非常繁琐的工作,因为我需要为我的每个实体类型创建一个转换器,并在数据集中的每个表上迭代。当心,如果我改变了我的数据库模型

此外,我还发现,如果我向SQL Server数据库提供有效的连接字符串,我只能实例化
myenties
。因为我不想每次都真正地向我的成熟数据库写入数据,这阻碍了我的意图。我打算只使用一些内存代理数据库

我能做得更简单些吗是否有某种自动化的转换方法,比如从数据集对象生成ObjectContext?


附言:我已经看到了一些关于单元测试的问题,这些问题似乎有些关联,但并不十分精确。

有一些工具可以在对象之间映射,例如。这是一个非常好的开源工具

但是,这些工具有时会出现问题,例如生成重复的实体键,或者在映射对象的结构非常不同时出现问题

如果您试图将其自动化,我认为如果您使用EF 4和POCO对象,它工作的可能性会更大

如果您最终手动编写映射代码,我会将其移动到一个单独的过程中,并在其中进行自动单元测试

我们这样做的方式是使用“Map”方法创建一个静态类:

  • 从DTO到EF对象
  • 从EF到DTO

然后为每个方法编写一个测试,我们在其中检查字段是否正确映射。

Automapper看起来不错。EF4也不错,但由于该项目已经非常成熟,并且基于3.5的要求,这目前不是一个选项。你说的“单独过程”是什么意思?你说的是“组装”吗"? 我也认为单元测试非常方便,但是我应该测试什么呢?映射是否完整?或者模型是否改变了?然而,最后,我要感谢你迄今为止的回答!谢谢设拉子回答这个问题。既然没有其他人回答,而且你提到的汽车制造商是解决这类问题的好方法,你当然会得到赏金。我在寻找类似的东西,我想知道你是否找到了一个简单的解决方案?我发现它通常会在线转换为实体,尽管我需要修饰我的实体(如果字段不匹配的话)。。我还没有为我的目的测试它
            MyEntities context = new MyEntities(); //create new in-memory context
            ///....
            //get the item in the navigations table
            MyDataSet.NavigationResultRow dataRow = ds.NavigationResult.First(); //here, a foreach would be necessary in a true-world scenario
            NavigationResult entity = new NavigationResult
            {
                Direction = dataRow.Direction,
                ///...
                NavigationResultID = dataRow.NavigationResultID
            }; //convert to entities

            context.AddToNavigationResult(entity); //add to entities
            ///....