4

由于各种原因,我不想将的 Entity Framework DB 模型的连接字符串存储在各种 .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 文件)。

4

1 回答 1

3

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

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

于 2011-09-29T15:15:44.150 回答