Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/22.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# 对具有NOLOCK的视图使用CRUD存储过程是否不好?_C#_Sql Server_Entity Framework - Fatal编程技术网

C# 对具有NOLOCK的视图使用CRUD存储过程是否不好?

C# 对具有NOLOCK的视图使用CRUD存储过程是否不好?,c#,sql-server,entity-framework,C#,Sql Server,Entity Framework,我们的DBA已经创建了一种模式,其中我们的数据库层通过视图和CRUD存储过程暴露给EF。积垢对视图起作用。所有视图都有NOLOCK提示。据我所知,诺洛克是一本肮脏的书,这让我很紧张。我们的数据库容量不高,但在保持数据完整性的同时,blanket NOLOCK的可扩展性似乎不是很强。我明白脱钩是个好主意,但问题是我们没有。我们的外部暴露对象看起来就像我们的视图,它与我们的表一一对应 “如果我们想更改基础数据模型,我们可以。”。。。但我们没有。我不会从VS/EF工具的角度讨论这一切是一个什么样的PI

我们的DBA已经创建了一种模式,其中我们的数据库层通过视图和CRUD存储过程暴露给EF。积垢对视图起作用。所有视图都有NOLOCK提示。据我所知,诺洛克是一本肮脏的书,这让我很紧张。我们的数据库容量不高,但在保持数据完整性的同时,blanket NOLOCK的可扩展性似乎不是很强。我明白脱钩是个好主意,但问题是我们没有。我们的外部暴露对象看起来就像我们的视图,它与我们的表一一对应

“如果我们想更改基础数据模型,我们可以。”。。。但我们没有。我不会从VS/EF工具的角度讨论这一切是一个什么样的PITA


在这种情况下使用NOLOCK不好吗?因为我们的数据库看起来和我们的类库一模一样,所以我认为去掉整个视图/存储过程层并直接从EF访问DB是有意义的,是吗?

发出nolock绝对是一个肮脏的读取。有时,这不会产生任何影响,但在某些情况下,您可能会遇到缺少记录或重复的结果集,并对此主题进行了一些问答。当您想在项目进入维护模式后进行一些存储优化时,使用存储过程来抽象CRUD操作的原因非常明显。把这些观点看作是一种以后不必担心的方式。DBA可以更容易地优化数据访问代码,而无需花费开发人员的时间。仅根据本文中的数据,我不能说您的DBA是对的还是错的。决策中可能存在太多的变量。但是,nolock的全面实现是正确的选择,这是很少见的。HTH

有许多关于从数据库设计专家的角度衡量ORM包装器的优点和缺点的好文章。当您使用EF时,很高兴了解wtf的实际运行情况。关于使用NOLOCK提示,这将是好的,直到它不是!正如您似乎已经准备好的那样,当您扩展到一定程度时,您将遇到所有类型的完整性问题,但这取决于您对幻象读取、写入等的容忍度。基本上,您希望原子性越精确,这就越是一个坏主意

我不是DBA,但我们只在需要执行大规模数据填充过程的情况下使用NOLOCK,这些过程需要监控并需要打印填充状态。这个答案可能需要整个论文才能回答。简言之,这要看情况而定。你可以通过EF获得很多,也可以通过EF失去很多。我的一些项目将使用LINQtoSQL/EF,其他项目将创建存储过程。这完全取决于我提取的数据量、我试图实现的优化以及我需要数据返回/更新的速度的严重性。有时候,我想尽可能减少我和数据库之间的废话,我只想要原始数据。其他时候,我想要EF为我的数据提供的序列化