Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 对整个项目使用一个DbContext对象可以吗?_C#_Entity Framework_Dbcontext - Fatal编程技术网

C# 对整个项目使用一个DbContext对象可以吗?

C# 对整个项目使用一个DbContext对象可以吗?,c#,entity-framework,dbcontext,C#,Entity Framework,Dbcontext,我正在从事一个使用EntityFramework6 for MySql的c项目。要将对象添加到dbContext,我使用以下方法: public void Add(User item) { using (var ctx = new DbContext()) { ctx.Users.Add(item); ctx.SaveChanges(); } } 现在我需要知道是否可以使用一

我正在从事一个使用EntityFramework6 for MySql的c项目。要将对象添加到dbContext,我使用以下方法:

    public void Add(User item)
    {
        using (var ctx = new DbContext())
        {
            ctx.Users.Add(item);
            ctx.SaveChanges();
        }
    }
现在我需要知道是否可以使用一个DbContext对象,例如:

私有DbContext _ctx=新的DbContext

并将Add方法更改为

    public void Add(User item)
    {
        _ctx.Users.Add(item);
        _ctx.SaveChanges();
    }
然后使用另一个方法来处理DbContext对象,并在应用程序退出时调用它

这是一个好方法吗?这种方法的利弊是什么


感谢advanced。

考虑一下DbContext作为类成员的利弊:

优点:

保存一行代码和两个大括号 缺点:

它不是线程安全的。一个线程可以尝试读取或写入从另一个线程生成的数据,该线程的状态可能不正确。 随着对象的添加,上下文的大小将增加,从而增加内存使用。 必须有人处理包含的类。 对于web应用程序来说,这并不重要,因为每个请求都会创建自己的对象,除非您将它们缓存在应用程序或会话中 DbContext设计用于每个数据库请求。Per:

DbContext实例表示工作单元和存储库模式的组合,这样就可以使用它从数据库进行查询,并将更改分组,然后将更改作为一个单元写回存储


总而言之,好处显然不值得付出代价。

考虑一下DbContext作为类成员的利弊:

优点:

保存一行代码和两个大括号 缺点:

它不是线程安全的。一个线程可以尝试读取或写入从另一个线程生成的数据,该线程的状态可能不正确。 随着对象的添加,上下文的大小将增加,从而增加内存使用。 必须有人处理包含的类。 对于web应用程序来说,这并不重要,因为每个请求都会创建自己的对象,除非您将它们缓存在应用程序或会话中 DbContext设计用于每个数据库请求。Per:

DbContext实例表示工作单元和存储库模式的组合,这样就可以使用它从数据库进行查询,并将更改分组,然后将更改作为一个单元写回存储


总而言之,好处显然不值得付出代价。

你不想在web应用程序中这样做。为什么?多重原因:

您可能会在单个线程上锁定所有请求 会话可能相互渗透,最终导致一个用户更改另一个用户的数据 虽然多个上下文的旋转似乎会影响性能并使您的编码更加复杂,但在引擎盖下面的事情处理得非常好

windows应用程序怎么样?视情况而定。如果应用程序始终处于连接状态,则在某些情况下可能会正常工作。当然,这比旋转起来容易。但是,缺点是无论是否正在进行任何工作,它都会消耗数据端的资源


总的来说,我更喜欢一个更乐观、不连贯的系统。如果这不是你需要的系统,而不是想要的,那么你可以考虑它。但是,作为一项规则,我不会有一个应用程序的单一实例。

您不希望在web应用程序中这样做。为什么?多重原因:

您可能会在单个线程上锁定所有请求 会话可能相互渗透,最终导致一个用户更改另一个用户的数据 虽然多个上下文的旋转似乎会影响性能并使您的编码更加复杂,但在引擎盖下面的事情处理得非常好

windows应用程序怎么样?视情况而定。如果应用程序始终处于连接状态,则在某些情况下可能会正常工作。当然,这比旋转起来容易。但是,缺点是无论是否正在进行任何工作,它都会消耗数据端的资源


总的来说,我更喜欢一个更乐观、不连贯的系统。如果这不是你需要的系统,而不是想要的,那么你可以考虑它。但是,作为一项规则,我不会有一个应用程序实例。

什么样的项目?相关:和什么样的项目?相关:和