相关疑难解决方法(0)

每个网络请求一个DbContext ...为什么?

我一直在阅读很多文章,解释如何设置实体框架,DbContext以便每个HTTP Web请求只使用各种DI框架创建和使用一个.

为什么这首先是一个好主意?使用这种方法有什么好处?在某些情况下这是个好主意吗?在使用DbContext存储库方法调用实例化s 时,您是否可以使用此技术执行某些操作?

c# asp.net entity-framework dependency-injection dbcontext

382
推荐指数
6
解决办法
9万
查看次数

从web.config读取连接字符串

如何从web.config文件中读取连接字符串到类库中包含的公共类?

我试过了:

WebConfigurationManager

ConfigurationManager
Run Code Online (Sandbox Code Playgroud)

但是这些类在我的类库中无法识别.

.net c# asp.net connection-string web-config

248
推荐指数
9
解决办法
39万
查看次数

在 EF 6 中在运行时更改连接字符串

我主要将 dbcontext 与 using 语句一起使用,如下所示:

using (var context = new MyContext())
{
}
Run Code Online (Sandbox Code Playgroud)

但是后来我不得不添加一个带有更改数据库功能的项目。我发现我可以将我的 dbcontext 构造函数更改为:

public MyContext(string connectionstring)
        : base(connectionstring)
{
}
Run Code Online (Sandbox Code Playgroud)

我创建了一个带有连接字符串属性的类:

public static class DbAccessor
{
    public static string ConnectionStringForContext { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我在开始时设置了这个属性,我的 using 语句如下所示:

using (var context = new MyContext(DbAccessor.ConnectionStringForContext) 
{}
Run Code Online (Sandbox Code Playgroud)

它有效,但我的连接字符串现在无处不在,我觉得我不应该对连接字符串这样做。有没有更好的方法来做到这一点?如果我想更改连接字符串,最好的处理方法是什么?我应该停止使用这些 using 语句吗?

我见过这个问题:Entity Framework change connection at runtime

但不同的是,我有一个有效的解决方案,但我不想到处都有我的连接字符串。如果我在每个 using 语句中都使用了该扩展方法。这几乎就像我的解决方案在每个 using 语句中仅多一行...

c# entity-framework connection-string database-connection

5
推荐指数
1
解决办法
5025
查看次数

如何在winform应用程序中正确使用DBContext/EF?

winforms应用程序中关于EF的信息并不多。在他的 msdn 页面上,我们发现:

使用 Windows Presentation Foundation (WPF) 或 Windows 窗体时,请为每个窗体使用一个上下文实例。这使您可以使用上下文提供的更改跟踪功能。

所以我认为我不应该使用:

using (var context = new MyAppContext()) 
{     
    // Perform operations 
}
Run Code Online (Sandbox Code Playgroud)

但我应该在每个MyAppContext表单的加载时创建一个新的,并在表单关闭时(也可以选择之前)释放它。SaveChange()

这是对的吗 ?

如果是,我如何在运行时更改整个应用程序的数据库?

c# entity-framework winforms dbcontext

5
推荐指数
1
解决办法
5507
查看次数

在运行时使用连接字符串

我使用数据库第一种方法创建了我的模型.问题是我的连接字符串在运行时更改.因此,我为DBContext类添加了一个重载的构造函数,它接受连接字符串.

public partial class MyDataContext: DbContext
    {
        public MyDataContext: ()
            : base("name=DbEntities")
        {
        }

        // added this overloaded contructor
        public MyDataContext: (string connectionString)
            : base(connectionString)
        {
        }
Run Code Online (Sandbox Code Playgroud)

我在运行时获得的连接字符串如下所示.

Integrated Security=SSPI;Data Source=localhost\sqlexpress;initial catalog=MyDatabase;Max Pool Size=100;Min Pool Size=20;Connect Timeout=15;
Run Code Online (Sandbox Code Playgroud)

然而,当我使用使用重载构造函数创建的MyDataContext运行查询时,我得到以下错误.

System.Data.Entity.Infrastructure.UnintentionalCodeFirstException:在Code First模式下使用上下文,其中包含从EDMX文件生成的用于Database First或Model First开发的代码.这将无法正常工作.要解决此问题,请不要删除引发此异常的代码行.如果您希望使用Database First或Model First,请确保Entity Framework连接字符串包含在启动项目的app.config或web.config中.如果要创建自己的DbConnection,请确保它是EntityConnection而不是其他类型的DbConnection,并将其传递给采用DbConnection的基本DbContext构造函数之一.要了解有关Code First,Database First和Model First的更多信息,请参阅此处的Entity Framework文档:http: //go.microsoft.com/fwlink/?LinkId = 394715

知道如何实现这一目标吗?

c# entity-framework-6

2
推荐指数
1
解决办法
5358
查看次数