Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.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# 程序内的实体框架加载项-未找到具有固定名称的ADO.NET提供程序的实体框架提供程序_C#_.net_Entity Framework_Sql Server Ce - Fatal编程技术网

C# 程序内的实体框架加载项-未找到具有固定名称的ADO.NET提供程序的实体框架提供程序

C# 程序内的实体框架加载项-未找到具有固定名称的ADO.NET提供程序的实体框架提供程序,c#,.net,entity-framework,sql-server-ce,C#,.net,Entity Framework,Sql Server Ce,我正在尝试在加载项中为我无法控制的程序使用Entity Framework 6 我已经构建了一个类库来包含我的上下文/模型逻辑,我希望能够在我的加载项程序集中使用它。我可以根据需要在应用程序中使用它,没有问题,但是使用应用程序需要一个app.config文件,其中包含可用的连接工厂(在我的例子中是Sql和Sql Ce) 该加载项必须编译为类库,因此该项目中的app.config文件未被使用-相反,我怀疑它使用了加载项运行所在程序的app.config文件。因此,我得到了一个例外 '未找到具有固定

我正在尝试在加载项中为我无法控制的程序使用Entity Framework 6

我已经构建了一个类库来包含我的上下文/模型逻辑,我希望能够在我的加载项程序集中使用它。我可以根据需要在应用程序中使用它,没有问题,但是使用应用程序需要一个app.config文件,其中包含可用的连接工厂(在我的例子中是Sql和Sql Ce)

该加载项必须编译为类库,因此该项目中的app.config文件未被使用-相反,我怀疑它使用了加载项运行所在程序的app.config文件。因此,我得到了一个例外 '未找到具有固定名称'System.Data.SqlServerCe.4.0'的ADO.NET提供程序的实体框架提供程序'。确保提供程序已在应用程序配置文件的“entityFramework”部分注册。有关更多信息,请参阅'

我尝试过许多奇怪和奇妙的事情,但都没有成功,我相信我最近的经历是:

<entityFramework>
  <providers>
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    <provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />
  </providers>
</entityFramework>
包含在加载项中:

public static ProjectContext GetContext() {
    SqlCeConnectionStringBuilder sqlBuilder = new SqlCeConnectionStringBuilder {
        DataSource = @"C:\Test.sdf"
    };
    DbConnection connection = new SqlCeConnection(sqlBuilder.ToString());
    return new ProjectContext(connection);
}
var ctx = GetContext();
List<Model> list = Project.Models.Where(model => model.ParentId == 0).ToList();
包含在我的API类库中:

public ProjectContext(DbConnection connection) : base(connection, true) {
    Database.SetInitializer(new MigrateDatabaseToLatestVersion<ProjectContext, Configuration>());
    Database.CreateIfNotExists();
}
publicprojectcontext(DbConnection-connection):base(connection,true){
SetInitializer(新的MigrateDatabaseToLatestVersion());
CreateIfNotExists();
}
尝试从上下文(在加载项中)访问数据时,此处出现异常:

var ctx=GetContext();
List List=Project.Models.Where(model=>model.ParentId==0.ToList();
当在单独的应用程序中以.exe的形式运行时,上述所有功能都能100%正常工作,其中包含EntityFramework NuGet packages for Sql和Sql Ce以及包含以下内容的app.config文件:

<entityFramework>
  <providers>
    <provider invariantName="System.Data.SqlClient" type="System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer" />
    <provider invariantName="System.Data.SqlServerCe.4.0" type="System.Data.Entity.SqlServerCompact.SqlCeProviderServices, EntityFramework.SqlServerCompact" />
  </providers>
</entityFramework>

在这种情况下,我能做些什么使我的程序作为加载项运行吗?我希望通过将实际的数据库连接传递到我的ProjectContext,可以消除对app.config providers列表的依赖。我是否错过了一些可以实现这一目标的东西

我在这个主题中找到的大部分内容似乎都是关于传递连接字符串的,所以我不知所措


提前谢谢

请检查文档,您看到了吗?谢谢两个,@ErikEJ您的链接将我带到解决方案,但两者都很有用。