我们的项目目前基于 DevForce 7.2.2 + EF5 + Oracle ODAC Release 2。Oracle 自 Cristmas 时代以来提供了新的 ODAC 第 3 版,它支持 EF6,因此我们计划迁移到 EF6。我安装了新的ODAC驱动程序和EF6,添加了IdeaBlade.EntityModel.Edm.EF6并成功编译了项目。但是当我尝试删除 edmx.tt 文件并再次保存 edmx 时,错误说:
运行转换:系统异常:无法从文件加载元数据工作区:C:\HRM\branches\work\Client\trunk\william_EF6\Source\Infor.HRCM.BusinessObjectEF\HRCMModel.edmx这可能是由于加载期间遇到的验证错误;请检查 EDMX 验证错误。找不到具有固定名称"Oracle.DataAccess.Client"的 ADO.NET 提供程序的实体框架提供程序。确保提供程序已在应用程序配置文件的"实体框架"部分中注册。有关详细信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=260882。 at IdeaBlade.VisualStudio.OM.CodeGenerator.Metadata.EdmxWrapper.ThrowException(String edmxFileName, IEnumerable 1 errors)
at IdeaBlade.VisualStudio.OM.CodeGenerator.Metadata.EdmxWrapper.LoadFrom(String edmxFileName, IEnumerable
1& errors) at IdeaBlade.VisualStudio.OM.CodeGenerator.BaseDomainModelTemplate.Generate() 在Microsoft.VisualStudio.TextTemplatingF6DEE480DF7B4F94A3D12E403704A2572EB9DB1E939B6073E8F11C8E668FEEA7B6005FF1359D9D2F5838491689A816AF3A6016F8F44D717349E05C0127639B54.Generated TextTransformation.TransformText() in c:\HRM\branches\work\Client\trunk\william_EF6\Source\Infor.HRCM HRCMModel.edmx.tt william_EF6.BusinessObjectEF
我在没有 DevForce 的情况下创建了新演示(只有 EF6 + ODAC 驱动程序),它可以工作。以下是我的应用程序配置:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
</configSections>
<connectionStrings>
<add name="HRCMContext" connectionString="metadata=res://*/HRCMModel.csdl|res://*/HRCMModel.ssdl|res://*/HRCMModel.msl;provider=Oracle.DataAccess.Client;provider connection string="data source=DEV12;password=hrm_trunk;persist security info=True;user id=HRM_TRUNK"" providerName="System.Data.EntityClient" />
</connectionStrings>
<oracle.unmanageddataaccess.client>
<version number="*">
<edmMappings>
<edmNumberMapping>
<add NETType="decimal" MinPrecision="1" MaxPrecision="19" DBType="Number" />
</edmNumberMapping>
</edmMappings>
</version>
</oracle.unmanageddataaccess.client>
<entityFramework>
<providers>
<provider invariantName="Oracle.DataAccess.Client" type="Oracle.DataAccess.EntityFramework.EFOracleProviderServices,
Oracle.DataAccess.EntityFramework,Version=6.121.2.0,
Culture=neutral, PublicKeyToken=89b483f429c47342" />
</providers>
<defaultConnectionFactory type="System.Data.Entity.Infrastructure.SqlConnectionFactory, EntityFramework" />
</entityFramework>
</configuration>
EF6 加载/解析 app.config 信息的方式似乎与在 EF5 中不同,从而导致设计时出现 DevForce 问题。 EF6 中的 DevForce 代码生成当前无法使用项目配置文件中的信息,因此找不到配置中的实体框架信息。
您现在可以通过将实体框架信息(包括 configSection 条目)添加到 devenv.exe.config 文件(位于与 devenv.exe 相同的文件夹中)来解决此问题。
我们希望在下一个 DevForce 版本中解决此问题。