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
방법을 사용하지 않고 위에 표시된 오류를 해결하려면 어떻게해야합니까?