【问题标题】:Is it dangerous when I returning the entity after SaveChangesAsync?在 SaveChangesAsync 之后返回实体是否危险?
【发布时间】:2019-07-09 06:29:22
【问题描述】:

我想知道这段代码有什么问题?会不会导致多个请求同时出现一些错误,在controller web api中调用这个方法?

public async Task<T> AddAsync(T entity)
{
    _dbContext.Set<T>().Add(entity);
    await _dbContext.SaveChangesAsync();

    return entity;
}

【问题讨论】:

  • 你已经在传递实体,所以你有对象引用,我认为当对象引用不变时你不需要返回它。
  • public async Task&lt;T&gt; AddAsync(T entity) - 这看起来像存储库模式。如果您使用的是实体框架,那么您不应该使用存储库(反)模式!见这里:softwareengineering.stackexchange.com/questions/180851/…
  • _dbContext 是一个具有较长生命周期的静态字段,还是一个短期对象,其持续时间不会超过相关的传入 HTTP 请求?
  • 这对于 stackoverflow 来说不是一个好问题,但是我认为“不要使用存储库而不是 EF 情绪”,在我看来,这是唯一的问题代码自动取款机。你也正在缓存你的 DbContext,谁知道多长时间
  • 短一点也没有错,但是打开的时间越长,出现连接错误和其他异常的可能性就越大

标签: c# entity-framework asynchronous repository-pattern savechanges


【解决方案1】:

根据定义引用对象(自定义或非自定义)。这本质上意味着在整个方法中所做的任何更改都会反映到您的基础对象中。

简而言之,返回您已经在参数中传递的相同对象是不必要的。当您将对象插入表中时,ID 将被分配给它(如果适用),并且只要对象的引用保持不变,这将通过您的所有类进行更新。

【讨论】:

    猜你喜欢
    • 2021-02-04
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 1970-01-01
    • 2017-08-21
    • 2012-11-18
    • 2023-04-07
    相关资源
    最近更新 更多