Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/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# 使用EntityFramework 6进行单元测试的导航属性修复_C#_Unit Testing_Entity Framework 6 - Fatal编程技术网

C# 使用EntityFramework 6进行单元测试的导航属性修复

C# 使用EntityFramework 6进行单元测试的导航属性修复,c#,unit-testing,entity-framework-6,C#,Unit Testing,Entity Framework 6,切换到实体框架6后,导航属性的自动修复已被删除。这对我们的单元测试造成了极大的破坏,单元测试的工作假设是设置关系的一侧,也会自动更新另一侧 运行代码时,一切正常,因为DbContext上的DetectChanges方法会自动同步关系,但在进行单元测试时,我更希望不必创建DbContext来进行同步 我发现这个博客解释说,可以将T4模板与EntityFramework6一起重用,但这不适用于空间数据类型,因为空间数据类型已移动到不同的名称空间 因此,我的解决方案是修改EntityFramework

切换到实体框架6后,导航属性的自动修复已被删除。这对我们的单元测试造成了极大的破坏,单元测试的工作假设是设置关系的一侧,也会自动更新另一侧

运行代码时,一切正常,因为DbContext上的DetectChanges方法会自动同步关系,但在进行单元测试时,我更希望不必创建DbContext来进行同步

我发现这个博客解释说,可以将T4模板与EntityFramework6一起重用,但这不适用于空间数据类型,因为空间数据类型已移动到不同的名称空间


因此,我的解决方案是修改EntityFramework 4 T4模板文件,并将其修复为与EntityFramework 6一起使用。我将此作为答案发布,但仍然想知道是否有其他人对此有更好的解决方案。

通常,EntityFramework4中的T4模板文件也可以直接用于EntityFramework6,以生成具有关系修复的POCO对象。但是,在使用空间数据类型时,需要进行几项修改:

用EF6实用程序替换包含的实用程序文件。这将导入正确的空间名称空间(也可能导入其他名称空间):

为此:

var textTransform = DynamicTextTransformation.Create(this);
EdmItemCollection ItemCollection = new EdmMetadataLoader(textTransform.Host, textTransform.Errors).CreateEdmItemCollection(inputFile) as EdmItemCollection;
并在最后一个#>标记之前的最底部添加缺少的ArgumentNotNull方法:

公共静态void ArgumentNotNull(T arg,字符串名称),其中T:class
{
如果(arg==null)
{
抛出新的ArgumentNullException(名称);
}
}
MetadataLoader loader = new MetadataLoader(this);
...
EdmItemCollection ItemCollection = loader.CreateEdmItemCollection(inputFile);
var textTransform = DynamicTextTransformation.Create(this);
EdmItemCollection ItemCollection = new EdmMetadataLoader(textTransform.Host, textTransform.Errors).CreateEdmItemCollection(inputFile) as EdmItemCollection;
public static void ArgumentNotNull<T>(T arg, string name) where T : class
{
    if (arg == null)
    {
        throw new ArgumentNullException(name);
    }
}