0

제네릭 및 종속성 삽입을 사용하여 저장소 및 작업 단위 패턴을 배우고 있습니다. 나는 꾸준히 오류를 범하고 있으며, 나는 근본적으로 뭔가 빠져있다.종속성 삽입 및 일반 기본 클래스의 오류

내 엔티티 클래스는 BaseEntity에서 상속하기 때문에 나는이 문제를 의심하지만 난 이해가 안 나는 그것이 '아이디'

이라는 데이터베이스 테이블 열을 찾고 이해하는 동안 다음과 같은 오류를 얻고있다 왜 그것을 고치기 위해 최선을 다할 것인가.

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

오류 유형 'System.Data.Entity.Core.EntityCommandExecutionException'>의 예외가 발생 EntityFramework.SqlServer.dll

반환하지만, 사용자 코드에 처리되지

추가 정보 : 명령> 정의를 실행하는 중 오류가 발생했습니다. 자세한 내용은 내부 예외를 참조하십시오.

내부 예외

{ "잘못된 열 이름 '아이디'."}

나는 의존성 주입을위한 EF6 MVC5 및 AutoFac를 사용하고 일부 내용을 추가합니다.

엔티티 클래스 (A 열 'ID는'데이터베이스에 존재하지 않습니다 - 데이터베이스의 핵심은 'EmrgencyAttendanceId'이다)와 Entity 클래스는 또한 같은 'EmrgencyAttendanceId'로 키를 설정합니다.

[Table("reporting.EDISRecords")] 
    public class EDISRecord : BaseEntity<int> 
    { 
     [Key] 
     [DatabaseGenerated(DatabaseGeneratedOption.None)] 
     public int EmergencyAttendanceId { get; set; } 

     [StringLength(50)] 
     public string Hospital { get; set; } 

     [StringLength(20)] 
     public string URNumber { get; set; } 

컨트롤러 액션 컨트롤러는 람다 식을 통과 EDISRecordService GetRecord의 메소드를 호출한다. 데이터베이스가 날짜로 저장되기 때문에 DbFunctions.TruncateTime을 사용하고 날짜 만 검색하려고합니다.

public ActionResult Search(string Date, string CaseNumber) 
     { 
      if (!string.IsNullOrEmpty(Date) || !string.IsNullOrEmpty(CaseNumber)) 
      { 
       DateTime dt = DateTime.Parse(Date); 
       var EmergencyAttendance = _edisRecordService.GetRecord(m => (DbFunctions.TruncateTime(m.ArrivalDateTime) == dt) && (m.RTAIdentifier == CaseNumber)); 

        //for initialising view model 
       SeperationSummaryViewModel model = new SeperationSummaryViewModel(); 


       //assign values for view model 
       if (EmergencyAttendance != null) 
       { 
        if (EmergencyAttendance.DepartureDestination != null) 
        { 
         if (EmergencyAttendance.DepartureDestination.Substring(0, 1) == ".") 
         { 
          model.DepartureDestination = EmergencyAttendance.DepartureDestination.Substring(1); 
         } 
         else 
         { 
          model.DepartureDestination = EmergencyAttendance.DepartureDestination; 
         } 
        } 
        else 
        { 
         model.DepartureDestination = "Not recorded by Emergency Department"; 
        } 
        if (EmergencyAttendance.InpatientAdmissionDiagnosis != null) 
        { 
         model.InpatientAdmissionDiagnosis = EmergencyAttendance.InpatientAdmissionDiagnosis; 
        } 
        else 
        { 
         model.InpatientAdmissionDiagnosis = "Not recorded by Emergency Department"; 
        } 
       } 
       //send view model into UI (View) 
       return PartialView("_SeperationInformationPartialView", model); 
      } 
      else 
      { 
       if (string.IsNullOrEmpty(Date) || string.IsNullOrEmpty(CaseNumber)) 
       { 
        return PartialView("Blank"); 
       } 
      } 

      return PartialView("Error"); 
     } 

서비스 클래스 서비스 클래스는 작업 단위를 인스턴스화하고 저장소 람다 표현식을 통과하는 방법을 받기 호출합니다.

public class EDISRecordService : IEDISRecordService 
    { 
     private readonly IUnitOfWork<DataWarehouseDataManager> _unitOfWork; 

     public EDISRecordService(IUnitOfWork<DataWarehouseDataManager> unitOfWork) 
     { 
      _unitOfWork = unitOfWork; 
     } 

     public EDISRecord GetRecord(Expression<Func<EDISRecord, bool>> @where) 
     { 
      return _unitOfWork.EDISRecordRepository.Get(@where); 
     } 



    } 

RepositoryBase 클래스 저장소 클래스가 '식> @where'

public class RepositoryBase<TEntity> : Disposable, IRepository<TEntity> 
    where TEntity : class 
{ 
    private readonly DbContext _dataContext; 

    private IDbSet<TEntity> Dbset 
    { 
     get { return _dataContext.Set<TEntity>(); } 
    } 

    public RepositoryBase(DbContext dbContext) 
    { 
     _dataContext = dbContext; 
    } 

    public TEntity Get(Expression<Func<TEntity, bool>> @where) 
    { 
     return Dbset.Where(where).FirstOrDefault(); 
    } 

    protected override void DisposeCore() 
    { 
     if (_dataContext != null) 
      _dataContext.Dispose(); 
    } 
} 

또한이 방법 실패 람다를 전달 받기 방법 impliments 저장소베이스 클래스로부터 상속

public TEntity Get(Expression<Func<TEntity, bool>> @where) 
{ 
    return Dbset.Where(where).FirstOrDefault(); <<<<<< Fails Here <<<<< 
} 

답변

0

나는 올바른 길을 가고 있었고 내가 Base Entity를 상속했기 때문이었습니다.

내 문제를 다시 읽을 때 명확 해졌습니다.

해결책은 기본 엔터티 클래스에서 단순히 상속하지 말고 모든 것이 좋습니다.

관련 문제