2016-10-04 73 views
-1

试图找出在使用通用存储库模式时如何获取最近添加的实体的Id。一个例子会很好。 这里的仓库,如何使用通用存储库模式时获取实体的ID c#

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如果逐步执行代码,而运行时,你会看到ID(无论你把它叫做)属性将被填充doen'st存在这里

+1

当你添加实体时,它的'Id'属性将被填充。你应该提供一些代码。 – Jonesopolis

+0

我包含了通用存储库类 –

回答

0

添加后。

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

创建一个接口:

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

,并把所有的车型继承它。然后,将您的类型约束更改为:

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

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

+0

开始了这个路径与接口,并在步进后,我意识到,dbcreator没有使用ID作为主键,但一些其他领域。提交后,其他字段填充正确的主键。 –