gpt4 book ai didi

c# - EF6/SQL Server Compact,基于代码的配置

转载 作者:太空宇宙 更新时间:2023-11-03 10:32:04 25 4
gpt4 key购买 nike

我正在尝试从 myexe.exe.config 移动我的 EF6 配置编码作为 empty DbProviderFactories node in machine.config 的解决方法-问题(此处描述:https://stackoverflow.com/a/24273922/600559)。我不想更改 machine.config文件。

我已阅读 Code-Based Configuration (EF6 onwards) .

我试过这样的实现:https://stackoverflow.com/a/23130602/600559 ,但是我无法让它工作。有人有有效的 EF6/SQL CE/基于代码的配置解决方案吗?

这是我的更改(从有效的 .config 解决方案到基于代码的解决方案):添加了新类:

public class DatabaseConfiguration : DbConfiguration
{
public DatabaseConfiguration()
{
SetExecutionStrategy("System.Data.SqlServerCe.4.0", () => new DefaultExecutionStrategy());
SetProviderFactory("System.Data.SqlServerCe.4.0", new SqlCeProviderFactory());
SetProviderServices("System.Data.SqlServerCe.4.0", SqlCeProviderServices.Instance);
}
}

然后 system.dataentityFramework .config 中的节点-文件已删除。

现在这有效,但是 machine.config读取文件:如果有 <DbProviderFactories/>machine.config我得到这个异常(exception):

Exception

所以真正的问题不是基于代码的配置不起作用,问题是 machine.config配置仍在读取并导致问题。任何人都知道如何解决这个问题?

最佳答案

找到解决方案。实现不从 machine.config 文件中读取的 IDbProviderFactoryResolver:

  public class CodeBasedDatabaseConfiguration : DbConfiguration
{
public CodeBasedDatabaseConfiguration()
{
SetExecutionStrategy("System.Data.SqlServerCe.4.0", () => new DefaultExecutionStrategy());
SetProviderFactory("System.Data.SqlServerCe.4.0", new SqlCeProviderFactory());
SetProviderServices("System.Data.SqlServerCe.4.0", SqlCeProviderServices.Instance);
SetProviderFactoryResolver(new CodeBasedDbProviderFactoryResolver());
}
}

internal class CodeBasedDbProviderFactoryResolver : IDbProviderFactoryResolver
{
private readonly DbProviderFactory sqlServerCeDbProviderFactory = new SqlCeProviderFactory();

public DbProviderFactory ResolveProviderFactory(DbConnection connection)
{
var connectionType = connection.GetType();
var assembly = connectionType.Assembly;
if (assembly.FullName.Contains("System.Data.SqlServerCe"))
{
return sqlServerCeDbProviderFactory;
}
if (assembly.FullName.Contains("EntityFramework"))
{
return EntityProviderFactory.Instance;
}
return null;
}
}

关于c# - EF6/SQL Server Compact,基于代码的配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29682096/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com