C# DBContext如何在C中处理多个用户会话#

C# DBContext如何在C中处理多个用户会话#,c#,entity-framework,C#,Entity Framework,我有一个MVC Web应用程序项目和一个类库项目。现在,我正在尝试实现实体框架事务。因此,我决定采用Singleton模式,在该模式中,我可以在整个事务中使用单个DbContext对象。但后来,我发现Factory&UoW模式比Singleton更合适。但是,我有几个问题,我还没有从网上找到答案 当我们使用Factory&UoW模式为整个项目提供单个DbContext时,如果有多个用户尝试执行相同的操作,会发生什么情况。他们将在同一个DbContext上工作,还是每个用户将被赋予在其事务中工作的

我有一个MVC Web应用程序项目和一个类库项目。现在,我正在尝试实现实体框架事务。因此,我决定采用Singleton模式,在该模式中,我可以在整个事务中使用单个DbContext对象。但后来,我发现Factory&UoW模式比Singleton更合适。但是,我有几个问题,我还没有从网上找到答案

  • 当我们使用Factory&UoW模式为整个项目提供单个DbContext时,如果有多个用户尝试执行相同的操作,会发生什么情况。他们将在同一个DbContext上工作,还是每个用户将被赋予在其事务中工作的唯一DbContext

  • 如果在同一DbContext上工作的用户数与事务数相同,如何管理并发性

    如果你能帮我回答我的问题,那就太好了

  • 您不需要单个DbContext对象,根据设计,它应该与每个请求一起实例化

  • 要处理对象,请选择“使用块”,或者如果使用依赖项注入,则它将由依赖项注入/IoC容器解析

  • 关于并发:

  • 实体框架默认支持乐观并发。EF将实体数据保存到数据库中,假设自加载实体后相同的数据未更改。如果发现数据已更改,则会引发异常,您必须在再次尝试保存之前解决冲突

  • 您不需要单个DbContext对象,根据设计,它应该与每个请求一起实例化

  • 要处理对象,请选择“使用块”,或者如果使用依赖项注入,则它将由依赖项注入/IoC容器解析

  • 关于并发:

  • 实体框架默认支持乐观并发。EF将实体数据保存到数据库中,假设自加载实体后相同的数据未更改。如果发现数据已更改,则会引发异常,您必须在再次尝试保存之前解决冲突


    您不需要显式事务,
    SaveChanges
    在内部使用事务。只有当您遵循了试图将每个更改保存到数据库的错误做法时,才需要它们,这与UoW完全相反。DbContext意味着它是短暂的。使用这种方式,它是一个UoW容器-所有更改都保存在内存中,直到您在请求结束时调用
    SaveChanges()
    。不需要显式事务。在web应用程序中决不能将DbContext用作单例L ASP.NET MVC教程显示在控制器操作本身中创建和处置的DbContext,或作为依赖项注入到具有瞬时或作用域生存期的构造函数中。在这两种情况下,构造函数的有效期与请求的有效期一样长,DbContext也是如此。好的,目前我有一个
    using
    语句,它在执行任何CRUD操作的每个方法中初始化新的DbContext。如果我使用语句删除
    ,并删除
    SaveChanges()
    ,则在执行最终提交之前,无法识别基于先前保存的条目工作的方法,因为更改尚未保存到数据库中。如何确保在事务中跟踪未提交的更改。不要使用
    删除
    ,不要删除
    保存更改
    。DbContext就是这样工作的。当您以这种方式使用它时,没有理由使用显式事务,因为
    SaveChanges()
    本身在内部使用事务,但我需要将
    SaveChanges()的数量包装到单个事务中。如何实现这一点??您不需要显式事务,
    SaveChanges
    在内部使用事务。只有当您遵循了试图将每个更改保存到数据库的错误做法时,才需要它们,这与UoW完全相反。DbContext意味着它是短暂的。使用这种方式,它是一个UoW容器-所有更改都保存在内存中,直到您在请求结束时调用
    SaveChanges()
    。不需要显式事务。在web应用程序中决不能将DbContext用作单例L ASP.NET MVC教程显示在控制器操作本身中创建和处置的DbContext,或作为依赖项注入到具有瞬时或作用域生存期的构造函数中。在这两种情况下,构造函数的有效期与请求的有效期一样长,DbContext也是如此。好的,目前我有一个
    using
    语句,它在执行任何CRUD操作的每个方法中初始化新的DbContext。如果我使用
    语句删除
    ,并删除
    SaveChanges()
    ,则在执行最终提交之前,无法识别基于先前保存的条目工作的方法,因为更改尚未保存到数据库中。如何确保在事务中跟踪未提交的更改。不要使用
    删除
    ,不要删除
    保存更改
    。DbContext就是这样工作的。当您以这种方式使用它时,没有理由使用显式事务,因为
    SaveChanges()
    本身在内部使用事务,但我需要将
    SaveChanges()的数量包装到单个事务中。如何做到这一点??