2016-10-04 4 views
-1

汎用リポジトリパターンを使用するときに最近追加されたエンティティのIDを取得する方法を理解しようとしています。良い例があります。 ここにあなたのコードをステップ実行した場合、実行中に、あなたはID(あなたはそれが呼び出され何でも)プロパティが読み込まれます表示されますここに汎用リポジトリパターン使用時にエンティティのIDを取得する方法c#

+1

エンティティを追加すると、その 'Id'プロパティが設定されます。いくつかのコードを提供する必要があります。 – Jonesopolis

+0

Generic Repositoryクラスを含む –

答えて

0

存在doen'stリポジトリ、

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です追加後

あなたの問題は、エンティティフレームワークではなく、汎用リポジトリを持つことです。あなたはちょうど追加したint IDを(再び仮定して)返す方法が必要です。

インターフェースを作成します。

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

をし、すべてのモデルがそれを継承しています。そして、あなたが保存した後entity.IDを返すことができ

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

:次に、あなたへの型制約を変更します。

+0

このパスをインターフェイスで開始しましたが、ステップ実行後にdbcreatorがプライマリキーとしてIDを使用していないことがわかりました。コミット後、他のフィールドに正しいプライマリキーが設定されました。 –

関連する問題