gpt4 book ai didi

c# - 使用数据库优先时的 Entity Framework 运行时 ConnectionString

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

我正在创建一个使用 Entity Framework 的应用程序;具体来说,数据库优先。

当用户登录时,ConnectionString 会在运行时创建,然后用于应用​​程序中的任何数据处理。

我已经在 Internet 上找到了一些解决方案,建议这样做的方法是为调用基 创建的 DbContext 类实现另一个构造函数DbContext(字符串):

public ApplicationDbContext(SqlConnection Connection)
: base(Connection.ConnectionString)
{
}

我在一个单独的文件中创建了一个生成代码的 public partial class,以说明任何进一步生成的代码会覆盖那些文件中已有的代码。

但是,当应用程序运行时,一旦使用此附加构造函数创建了 ApplicationDbContext,就会引发以下异常:

“上下文正在代码优先模式下使用,代码是从用于数据库优先或模型优先开发的 EDMX 文件生成的代码...”

这很有意义,因为我使用的是数据库优先方法。但是,我在使用 Database First 的地方看到的所有答案都建议这样做。

MSDN 上进一步研究了它,我看到实际上还有另一个我可以使用的 DbContext 构造函数:DbContext(String, DbCompiledModel)。我想知道这是否是我所缺少的,这是否是我需要的构造函数,因为我会说我正在使用编译模型(......或者我是?)。

但是,这是处理它的正确方法还是需要以其他方式处理?

最佳答案

首先将构造函数重载添加到您的上下文类以接受 string 作为连接字符串:

public TestDBEntities()
: base("name=TestDBEntities")
{
}
public TestDBEntities(string connectionString)
: base(connectionString)
{
}

然后在您的 app.configweb.config 中使用连接字符串。您应该将 &qout; 替换为 " 您还应该包括 metadata=... 并且连接应该采用这样的格式:

var cn = @"metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;" +
@"provider=System.Data.SqlClient;" +
@"provider connection string=""" +
@"data source=(localdb)\v11.0;" +
@"initial catalog=TestDB;" +
@"integrated security=True;" +
@"MultipleActiveResultSets=True;" +
@"""";
var db = new TestDBEntities(cn);

注意:最好将新重载放在分部类中。这样context的.tt模板运行的时候就不会每次都去碰了。

关于c# - 使用数据库优先时的 Entity Framework 运行时 ConnectionString,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37714695/

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