使用通用存储库模式时如何获取实体ID

时间:2016-10-04 20:18:13

标签: c# generics design-patterns repository entity-framework-5

尝试在使用Generic Repository模式时弄清楚如何获取最近添加的实体的Id。一个例子很好。 这是存储库,

public class Repository<T> : IRepository<T> where T : class    {
protected DbContext DbContext { get; set; }
protected DbSet<T> DbSet { get; set; }
public Repository(DbContext dbContext)
{
if (dbContext == null)
            throw new ArgumentNullException("dbContext");
        DbContext = dbContext;
        DbSet = DbContext.Set<T>();
    }
 public virtual void Add(T entity)
    {
        DbEntityEntry dbEntityEntry = DbContext.Entry(entity);
        if (dbEntityEntry.State == EntityState.Detached)
        {
            DbSet.Attach(entity);
            dbEntityEntry.State = EntityState.Added;
        }
        else
        {
            DbSet.Add(entity);
        }
   }
}

entity.Id doen'st存在于此

1 个答案:

答案 0 :(得分:1)

如果您在运行时单步执行代码,则会在添加后看到ID(无论您调用它)属性。

那么,您的问题不是实体框架,而是拥有通用存储库。你需要一种方法来返回你刚刚添加的(再次假设)int ID

创建一个界面:

public interface IEntity
{
    public int ID { get; set; }
}

让你的所有模特继承它。然后,将类型约束更改为:

public class Repository<T> : IRepository<T> where T : IEnitity

然后,您可以在保存后返回entity.ID