我使用此T4 模板为 EF4 Code First 预先生成的视图在构建服务器中不起作用。我没有在构建服务器中重新生成视图,只是编译并运行 MSTest。运行测试时抛出错误:
System.Data.MappingException:EntityContainer 'DB' 的映射和元数据信息不再匹配用于创建预生成视图的信息
我在另一台机器上运行相同的模板,哈希值不同。我想这就是它在构建服务器中不起作用的原因。其他机器运行时哈希值不同,因此验证失败并抛出异常。
我在用着:
- VS 2010 专业版
- .Net 框架 v4.0.30319
- 实体框架 v4.2(代码优先)
- 适用于 C# (v1.0.1) 的 EF CodeFirst 视图生成 T4 模板- 稍微修改了 GetEdmxSchemaVersion 以为我的设置返回正确的 EntityFrameworkVersions 版本。
- 使用类库项目模板
我正在运行的测试连接到使用代码签入的 SQL DB 文件。
我已经检查了构建服务器及其使用相同的 EF dll 版本和 .Net Framework 版本。
知道为什么哈希值不同吗?
更新: 我使用EdmxWriter.WriteEdmx()从两台开发机器生成并比较了两个 XML 文件。
这是架构版本(两台机器都相同):
<?xml version="1.0" encoding="utf-8"?>
<Edmx Version="2.0" xmlns="http://schemas.microsoft.com/ado/2008/10/edmx">
明显的区别是 XML 文件中某些节点的顺序。这是一个例子:
机器1:
<EntityType Name="PersonEntity" BaseType="Self.Entity" />
<EntityType Name="CompanyEntity" BaseType="Self.Entity" />
机器2:
<EntityType Name="CompanyEntity" BaseType="Self.Entity" />
<EntityType Name="PersonEntity" BaseType="Self.Entity" />
知道为什么它们的顺序不同吗?
更新 2: 来自构建服务器的 Edmx (xml) 对于其他 2 台开发机器也不同。同样,一些节点的顺序是不同的。
机器 1 和构建服务器在 %windir%\Microsoft.NET\assembly\GAC_MSIL\System.Data.Entity\v4.0_4 中都有 System.Data.Entity.dll (相同的文件和产品版本 -- v4.0.30319.1 ) .0.0.0__b77a5c561934e089。
更新 3: 我还查看了 System.Data.Entity.Design.dll 的版本。T4 模板引用此程序集。机器 1 有此 dll 的两个副本...在 GAC (v4.0.30319.233) 和 C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.0 (v4.0.30319.1) . 在构建服务器和机器 2 中也是如此。我想知道运行时期间的哈希验证函数是否正在使用这个 dll,因为它在我的项目中没有被引用。如果是,则使用哪个版本。但是话又说回来,哈希验证在机器 1 中是成功的。