2016-10-04 7 views
-1

일반 저장소 패턴을 사용할 때 최근에 추가 된 엔티티의 ID를 얻는 방법을 알아 내려고합니다. 좋은 예가 될 것입니다. 여기, 당신이 실행하는 동안, 당신은 ID (당신이 그것을 호출이 무엇이든) 속성이 채워집니다를 볼 것이다, 당신의 코드를 단계별 경우 여기일반 저장소 패턴을 사용할 때 엔티티 ID를 얻는 방법 C#

+1

엔티티를 추가하면 해당 'Id' 속성이 채워집니다. 몇 가지 코드를 제공해야합니다. – Jonesopolis

+0

일반 리포지토리 클래스 –

답변

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을 저장소 (repository) 추가 후.

문제는 엔티티 프레임 워크가 아니라 일반 저장소가 있습니다. 방금 추가 한 int ID (다시 가정)을 반환 할 방법이 필요합니다.

는 인터페이스 만들기 :

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

을하고 모든 모델은 그것에서 상속합니다. 그런 다음 저장 한 후 entity.ID을 반환 할 수 있습니다

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

: 그런 다음에 당신의 유형의 제약 조건을 변경합니다.

+0

이 경로를 사용하여 인터페이스를 시작한 후 단계별로 dbcreator가 ID를 기본 키로 사용했지만 다른 일부 필드는 사용하지 않는다는 것을 깨달았습니다. Commit 후에 다른 필드가 올바른 기본 키로 채워졌습니다. –