【发布时间】:2021-09-06 16:10:12
【问题描述】:
我正在创建一个使用实体框架的应用程序;具体来说,数据库优先。
当用户登录时,会在运行时创建一个ConnectionString,然后用于应用程序中的任何数据处理。
我已经在 Internet 上找到了许多解决方案,建议这样做的方法是为创建的 DbContext 类实现另一个构造函数,该类调用基类 DbContext(string):
public ApplicationDbContext(SqlConnection Connection)
: base(Connection.ConnectionString)
{
}
我在一个单独的文件中创建了这个文件,该文件是生成代码的public partial class,以说明任何进一步生成的代码会覆盖这些文件中已有的内容。
但是,当应用程序运行时,一旦使用此附加构造函数创建了 ApplicationDbContext,就会引发以下异常:
“上下文正在 Code First 模式下使用,代码是从 EDMX 文件生成的,用于 Database First 或 Model First 开发...”
这是有道理的,因为我使用的是数据库优先方法。但是,我在使用 Database First 的地方看到的所有答案都建议这样做。
在MSDN 上进一步研究后,我发现实际上还有另一个DbContext 可以使用的构造函数:DbContext(String, DbCompiledModel)。我想知道这是否是我所缺少的,这是我需要的构造函数,因为我会说我使用的是编译模型(......或者我是吗?)。
但是,这是处理它的正确方法还是需要以其他方式处理?
【问题讨论】:
-
感谢您的反馈;但是我尝试过以这种方式构造 ConnectionString ,但我仍然遇到同样的错误。我检查了 App.config 中 ConnectionString 的格式,以便复制默认使用的 ConnectionString 中的相同参数,但是,当我尝试使用此数据构造 ConnectionString 时,出现错误“不支持关键字”对于“提供者”、“连接字符串”和“提供者连接字符串”。删除这些至少可以构造字符串,但正如我所说,这只会再次导致原始错误。
-
问题出在传递给构造函数的连接字符串中。
标签: c# entity-framework