2016-10-04 66 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作爲主鍵,但一些其他領域。提交後,其他字段填充正確的主鍵。 –