【发布时间】:2018-04-18 12:24:04
【问题描述】:
这里有多个问题:
-
我试图了解有什么区别(除了明显的 EF Core 中
AddAsync()和Add()方法之间的异步)? -
你什么时候选择一个而不是另一个?
-
为了一致性而选择其中一个是否重要?
【问题讨论】:
标签: asp.net-core entity-framework-core
这里有多个问题:
我试图了解有什么区别(除了明显的
EF Core 中 AddAsync() 和 Add() 方法之间的异步)?
你什么时候选择一个而不是另一个?
为了一致性而选择其中一个是否重要?
【问题讨论】:
标签: asp.net-core entity-framework-core
来自source code:
此方法是异步的,仅允许特殊值生成器,例如 使用的那个 'Microsoft.EntityFrameworkCore.Metadata.SqlServerValueGenerationStrategy.SequenceHiLo', 异步访问数据库。对于所有其他情况,非 应该使用异步方法。
因此,如果您使用可能需要访问数据库以获取新值以分配给新条目的值生成器,例如 SequenceHiLo 生成器,请使用AddAsync()。
【讨论】:
在浏览完代码后,我同意 Henk Holterman 的评论,即当您的代码异步时使用 Add() 是一种优化。 AddAsync() 的文档说“对于所有其他情况,应使用非异步方法”,这有点误导。
我想了解 EF Core 中的
AddAsync()和Add()方法之间有什么区别(除了明显的异步)?
AddAsync() 是 100% 异步安全的,而 Add() 仅在某些情况下是异步安全的。就像评论暗示的那样,您的列之一可以配置为使实体框架对数据库进行查询以生成最终将插入的值。在这种情况下,如果您调用Add(),就会发生阻塞。
你什么时候选择一个而不是另一个?
Add()。AddAsync(),就像您选择其他方法一样。Add() 永远不会进行数据库查询,那么请使用Add()。为了一致性而选择其中一个是否重要?
不,尽管AddAsync() 文档中有建议。
【讨论】:
AddAsync 吗?我的意思是,如果我的行的 PK 是由 db 生成的 int。或者如果我使用Add会不会有什么不同?
这一切都取决于你想要什么?
如果您使用的是 Hi/Lo 算法,则调用 AddAsync() 是有意义的。在所有其他情况下,调用同步 Add()。
重要的是要了解这不是某种 EF 功能,这是使用数据库的旧技术。这种技术的选择对您的数据设计有深远的影响。因此,更多的是您处理数据的方法,而不是同步异步代码。
这是一个很好的描述 Hi/Li:
https://www.talkingdotnet.com/use-hilo-to-generate-keys-with-entity-framework-core/
【讨论】: