gpt4 book ai didi

c# - 如何使用基于代码的配置在 Entity Framework 6 中设置连接

转载 作者:行者123 更新时间:2023-11-30 12:45:58 24 4
gpt4 key购买 nike

我对有关 EF6 基于代码的配置的(稀疏的)MSDN 文档感到有点困惑。我有一个 WPF 应用程序需要根据命令行参数和/或对话框中的用户输入创建 SQL 连接。在旧版本的 EF 中,我每次都通过构建连接字符串并将其传递到派生的 DbContext 来实现这一点。

如果我能避免这样做就好了,因为这也意味着必须将连接字符串传递给每个需要使用上下文的 View 模型。 EF6 中的 DbConfig 似乎正在实现这一目标。根据文档,我创建了一个看起来像这样的自定义类:

public class EfConfiguration: DbConfiguration
{
public EfConfiguration()
{
SetExecutionStrategy("System.Data.SqlClient", () => new SqlAzureExecutionStrategy());
SetDefaultConnectionFactory(new SqlConnectionFactory());
SetDatabaseInitializer<DataContext>(null);
}
}

根据我的理解,EF 将拾取并使用它做一些事情。但我的问题是,应用程序运行后如何设置连接字符串?这样做是否意味着我现在可以在没有参数的情况下实例化我的 DbContext?

最佳答案

万一其他人遇到这个问题,我是这样解决的:

DbContext 有一个接受现有连接的构造函数。所以我派生的 DbContext(在这种情况下称为实体)有一个构造函数,看起来像:

    public Entities(IConnectionHelper connHelper)
:base(connHelper.GetConnection(), true)
{ }

IConnectionHelper 是一个注入(inject)的单例,它具有 server/db/uname/pw 的属性,并且在更改它们时,使用 SqlConnectionStringBuilder 构建一个内部连接字符串。由于它是单例,因此用户可以从对话框等修改属性,并且它们仍然可以在其他任何地方访问。 GetConnection() 方法从工厂创建连接:

            SqlConnectionFactory connFactory = new SqlConnectionFactory(_connectionString);
return connFactory.CreateConnection(_connectionSettings.Database);

其中 _connectionString 只是我构建的字符串,而 _connectionSettings 只是一个包含各种连接参数的 POCO。

然后为了实现 DbContext 的无参数构造的目标,我创建了一个简单的工厂,它将 IConnectionHelper 构造函数作为依赖注入(inject):

    public EntitiesFactory(IConnectionHelper connHelper)
{
_connHelper = connHelper;
}

public Entities Create()
{
return new Entities(_connHelper);
}

我将这个工厂注入(inject)到任何需要它的类中,然后这是一个简单的问题:

using (var db = _entitiesFactory.Create())
{ ... }

你也可以让工厂方法静态化,不用担心注入(inject),但我这样做是为了方便测试。

关于c# - 如何使用基于代码的配置在 Entity Framework 6 中设置连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21891633/

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