【问题标题】:Simultaneously writing to same table with Entity Framework使用实体框架同时写入同一张表
【发布时间】:2013-04-18 19:07:24
【问题描述】:

开发网站(使用实体框架)我遇到了以下问题:

1.如果很多人(比如说 10,000 人)试图通过实体框架同时“写入”数据库(SQL Server)中的同一个特定表,会发生什么?

2.在我的项目中,我有模块,出于解耦的原因,我使用单例类 (ModulesManager),它应该从每个模块中采取行动并异步执行,如下所示:

    public void InsertNewRecord(Action addNewRecordAction)
    {
        if (addNewRecordAction != null)
        {
            addNewRecordAction.BeginInvoke(recordCallback, null);
        }
    }

使用单例类作为唯一负责写入数据库的地方是一种好方法吗?

3.Entity Framework 能否提供与使用 SQL 查询相同的速度?

【问题讨论】:

    标签: asp.net c#-4.0 entity-framework-4


    【解决方案1】:

    如果很多人(比如说 10,000 人)试图“写作”会发生什么 同时通过数据库(SQL Server)中的同一特定表 实体框架?

    如果您的意思是插入到同一个表中,这些插入将根据数据库中的事务隔离级别进行处理。通常只有单个事务可以持有插入锁,因此插入是按顺序处理的(与 EF 无关)。让 10.000 个用户同时插入似乎不是可持续的架构 - 其中一些可能会超时。

    在我的项目中,我有模块,出于解耦原因,我使用 单例类 (ModulesManager) 应该从每个类中采取行动 模块并异步执行它,如下所示:

    您的经理异步调用操作,因此答案主要取决于操作正在做什么。如果它打开自己的上下文,执行一些更改并保存它们,那么在 EF 端应该不会有任何技术问题。

    Entity Framework 是否可以提供与使用 SQL 查询相同的速度?

    没有。 EF 会进行额外的处理,因此它总是会变慢。

    【讨论】:

    • 在您看来,使用实体框架而不是 SQL 查询(旧方式)真正构建大型项目吗?
    • 规模本身不是约束。真正的性能要求和您设计应用程序的方式可能需要直接使用 SQL 查询(但不一定在任何地方,因为结合 EF 和本机 SQL 仍然有效,有时甚至是需要的)。
    猜你喜欢
    • 2014-03-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多