Asp.net 使用实体框架同时写入同一个表
开发网站(使用实体框架)我遇到了以下问题: 1.如果很多人(比如说10000人)试图通过实体框架同时“写入”DB(SQL Server)中的同一个特定表,会发生什么 2.在我的项目中,我有模块,出于解耦的原因,我使用singleton类(ModulesManager),该类应从每个模块中采取行动,并异步执行,如下所示:Asp.net 使用实体框架同时写入同一个表,asp.net,c#-4.0,entity-framework-4,Asp.net,C# 4.0,Entity Framework 4,开发网站(使用实体框架)我遇到了以下问题: 1.如果很多人(比如说10000人)试图通过实体框架同时“写入”DB(SQL Server)中的同一个特定表,会发生什么 2.在我的项目中,我有模块,出于解耦的原因,我使用singleton类(ModulesManager),该类应从每个模块中采取行动,并异步执行,如下所示: public void InsertNewRecord(Action addNewRecordAction) { if (addNewRecord
public void InsertNewRecord(Action addNewRecordAction)
{
if (addNewRecordAction != null)
{
addNewRecordAction.BeginInvoke(recordCallback, null);
}
}
使用singleton类作为唯一负责向DB写入数据的地方,这是一种好方法吗
3.实体框架是否可以提供与使用SQL查询相同的速度
如果有很多人(比如说10000人)试图“写作”,会发生什么
同时通过数据库(SQL Server)中的同一特定表
实体框架
如果您的意思是插入到同一个表中,那么这些插入将根据数据库中的事务隔离级别进行处理。通常只有单个事务可以持有插入锁,因此插入是按顺序处理的(它与EF无关)。同时插入10000个用户似乎不是可持续的体系结构——其中一些用户可能会超时
在我的项目中,我有模块,出于解耦的原因,我使用了
singleton类(ModuleManager),它应该从每个
模块并异步执行,如下所示:
public void InsertNewRecord(Action addNewRecordAction)
{
if (addNewRecordAction != null)
{
addNewRecordAction.BeginInvoke(recordCallback, null);
}
}
您的管理器异步调用该操作,因此答案主要取决于该操作正在执行的操作。若它打开自己的上下文,执行一些更改并保存它们,那个么在EF端就不会有任何技术问题
实体框架是否可以提供与使用SQL查询相同的速度
否。EF会进行额外的处理,因此它将始终较慢。您认为使用实体框架而不是SQL查询(旧方法)构建大型项目是真的吗?规模本身不是一个约束。真正的性能要求以及设计应用程序的方式可能需要直接使用SQL查询(但不一定在任何地方都使用,因为将EF和本机SQL结合起来仍然有效,有时甚至是需要的)。