【问题标题】:How to return entity after insert it in generic repository将实体插入通用存储库后如何返回实体
【发布时间】:2015-06-18 10:59:47
【问题描述】:

我正在使用实体框架并编写了一个通用存储库来实现 UnitOfWork 模式。

我需要返回我插入的实体,并带有分配的 ID。

public class GenericRepository<TEntity> where TEntity : class
{
    internal AppDb Context;
    internal DbSet<TEntity> DbSet;

    public GenericRepository(AppDb context)
    {
        this.Context = context;
        this.DbSet = context.Set<TEntity>();
    }

    // ...

    public virtual void Insert(TEntity entity)
    {
         DbSet.Add(entity);
    }

    // ...
}

【问题讨论】:

  • 我认为DbSet&lt;TEntity&gt;.Add 已经返回实体看看here

标签: c# entity-framework entity-framework-6


【解决方案1】:

你是说这个吗?

public virtual TEntity Insert(TEntity entity)
{
     return DbSet.Add(entity);
}

DbSet&lt;T&gt;.Add() returns T,所以只需更改返回类型并键入return

【讨论】:

  • 所以我不需要保存来获取新的id
  • 阅读How do I ask a good question?。不要通过评论答案来扩展您的问题,确保您的问题包含我们和您需要知道的所有内容。当然你需要调用DbContext.SaveChanges(),否则实体不会分配数据库生成的ID。是否要在通用存储库的 Insert() 方法中调用 DbContext.SaveChanges() 完全取决于您。如果你想让Insert()返回一个已经保存到数据库的实体,是的,你必须在返回之前调用DbContext.SaveChanges()
  • @Terry 当一个网站每天收到数千个问题时,其中许多问题非常不清楚,如果没有 OP 提供的额外信息就无法回答,在您询问之前必须阅读一些文本问题。这不是一个只有少数朋友的论坛,而是一个拥有数十万成员和数百万问题的庞大社区。​​span>
  • @CodeCaster 我认为这不是强制性的。当然,对于那些只想回答符合标准的人提出的问题的人来说,它很有用。它只是为该网站搭建了一个舞台,越来越多地为内部精英人群提供服务,这些人群已经上升到可以将其他人赶出去的地步。
猜你喜欢
  • 1970-01-01
  • 2019-05-09
  • 2015-10-07
  • 1970-01-01
  • 1970-01-01
  • 2016-07-17
  • 2019-04-17
  • 1970-01-01
  • 2017-11-06
相关资源
最近更新 更多