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