2013-12-11 3 views
0

asp .Net MVC 프로젝트에서 BaseRepository를 사용하고 있습니다. 편집 작업이 작동하지만 추가 작업에서 작동하도록 트릭을 만들어야합니다. 구체적으로 내베이스 저장소와 BaseEntity 클래스는 다음과 같습니다.BlToolkit BaseRepository 클래스의 데이터 오류 삽입

public class BaseRepository<TEntity, T> : IRepository<TEntity, T> where TEntity : BaseEntity<T> 
{ 
    private DbManager _context; 

    private Table<TEntity> Table 
    { 
     get { return _context.GetTable<TEntity>(); } 
    } 

    public BaseRepository(DbManager context) 
    { 
     _context = context; 
    } 

    //... 

    public TEntity Add(TEntity entity) 
    { 
     //... 

     return entity; 
    } 

    public TEntity Edit(TEntity entity) 
    { 
     _context.Update(entity); 

     return entity; 
    } 

    //... 
} 

public class BaseEntity<T> 
    { 
     [PrimaryKey] 
     public T Id { get; set; } 
    } 

추가 작업을 위해 세 가지 방법을 시도했습니다. 처음 두 가지 방법으로 오류가 발생했습니다.

첫 번째 방법 (작동하지 않습니다) :

public TEntity Add(TEntity entity) 
    { 
     _context.Insert(entity);    

     return entity; 
    } 

오류 메시지 : Cannot insert explicit value for identity column in table '...' when IDENTITY_INSERT is set to OFF.

-

두 번째 방법 (작동하지 않습니다) :

public TEntity Add(TEntity entity) 
    { 
     Table.Insert(() => entity);   

     return entity; 
    } 

오류 메시지 : Operation is not valid due to the current state of the object.

-

세 번째 방법 (작업) :

public TEntity Add(TEntity entity) 
    { 
     var l = new List<TEntity> { entity }; 
     _context.InsertBatch(l);    

     return entity; 
    } 

-

편집 작업이 오류없이 작동하지만 필요한 작업 추가 트릭을 만들려고. 정상적인 추가 작업의 문제점은 무엇이며이를 작동시키는 방법이 있습니까?

내가 @Mladen Macanović의 조언을 시도하고 나는 기본 BaseEntity 클래스의 기본 키에 Identity 속성을 추가, 는 표시 오류는 위의 INT 형 키 차를 가진 엔티티 갔다. ,

public class BaseEntity<T> 
    { 
     [PrimaryKey Identity] 
     public T Id { get; set; } 
    } 

그러나,이 내 실체의 일부가 Guid를의 유형에 기본 키가 때문에 완전한 해결책이 아니다 : 표시

오류는 위의 기본 키의 INT 타입을 가진 엔티티 간 따라서 Identity 속성을 추가하면 다른 오류가 발생합니다.

Identity 속성을 사용하지 않고 InsertBatch 메서드가 작동합니다. 따라서 Identity 열의 BaseEntity 클래스에서 Identity 특성을 사용하지 않고 데이터를 추가 할 수 있습니다. 인서트 배치 방법의 차이점은 무엇입니까? InsertBatch 방법을 사용하지 않고 위에 표시된 오류를 해결하려면 어떻게해야합니까?

답변

1

데이터베이스 테이블에 문제가 있습니다. 그래서 IDENTITY_INSERT 오류가 발생합니다. SQL Server Management Studio로 이동하여 디자인 테이블을 마우스 오른쪽 단추로 클릭하고 기본 키 열의 속성 ID 지정 -> (ID 인 경우)을 예로 설정합니다.