如何将连接字符串传递给具有Entity Framework 4.1的数据库优先DBContext的构造函数?

时间:2011-09-29 15:11:26

标签: entity-framework ado.net entity-framework-4.1 ado.net-entity-data-model dbcontext

出于各种原因,我想将我的Entity Framework数据库模型的连接字符串存储在各种.config文件中。 (我使用最新最好的DBContext API和新的Entity Framework 4.1,.NET 4和Visual Studio 2010 C#。)但是,DBContext的代码生成模板只创建一个无参数构造函数。 (如果我不使用DBContext API,那么我的实体框架模型有7种不同的构造函数可供选择,包括我想要的构造函数。)

我能弄清楚如何做到这一点的唯一方法是直接修改代码生成模板(context.tt文件)以给我我想要的构造函数(下面的示例代码)。这是有效的,但感觉就像我在“艰难的方式”这样做。获取接受连接字符串的DBContext构造函数的正确方法是什么?

    public <#=Code.Escape(container)#>(string connectionString)
        : base(connectionString)
    {
<#
        WriteLazyLoadingEnabled(container);
#>
    }

最后一点,以防它可能对其他人有所帮助。虽然这种方法有效,但我花了一段时间才意识到“连接字符串”并不是严格意义上的数据库连接字符串,而是包含数据库连接字符串的特殊实体框架连接字符串(就像存储在应用程序中的那样) .config文件)。

1 个答案:

答案 0 :(得分:3)

您的方法看起来是最正确的方法。这就是为t4模板创建的,你基本上做的是模型优先模板默认做的事情。

另一种可能性是使db上下文类为partial(如果它不是默认值)并在其旁边创建另一个部分类文件以添加所需的构造函数。但是,您可能希望所有的t4生成的上下文都遵循此模式,因此我认为最好利用代码生成来自动执行此操作。