Breeze Js为自定义EF ADO.Net提供程序生成元数据

本文关键字:程序生成 元数据 Net ADO Js 自定义 EF Breeze | 更新日期: 2023-09-27 18:21:11

我们使用自定义实体框架ADO.Net提供程序(数据访问层是应用程序和FireBird之间的中间层)。EF与此类供应商合作良好。此外,我们使用连接到EFContextProvider的Breeze服务。问题是,当我尝试使用类似的东西时

var contextProvider = new EFContextProvider<CompanyContext>();
return contextProvider.Metadata();

首先我得到了例外:

The Entity Framework provider type 'System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer' registered in the application config file for the ADO.NET provider with invariant name 'System.Data.SqlClient' could not be loaded. Make sure that the assembly-qualified name is used and that the assembly is available to the running application. See http://go.microsoft.com/fwlink/?LinkId=260882 for more information.

好的,除了我的自定义提供程序之外,我还添加了对web.config的SqlServer提供程序引用

 <entityFramework>
    <providers>
      <provider invariantName="MyDataProvider" type="MyDataProvider.MyProviderServices, MyDataProvider"/>
      <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    </providers>   
</entityFramework>

现在我得到了另一个错误:

Additional information: CREATE DATABASE permission denied in database 'master'.

看起来Breeze在内部使用SqlServer提供程序。是否将EFContextProvider.Metadata与自定义ADO.Net提供程序一起使用?

Breeze Js为自定义EF ADO.Net提供程序生成元数据

哦,我自己很快就找到了答案。在默认的CompanyContext构造函数中,应添加以下行:

Database.SetInitializer<CompanyContext>(null);

就是这样!Breeze从DbSet中完美而快速地生成元数据。