코드 첫 번째 엔터티 프레임 워크를 통해 함수를 실행하는 동안 열 이름을 소문자로 사용해야합니다. 내가 this link에서 솔루션을 사용하려고했지만 그것은 단지 테이블 매핑 및 함수 매핑을 위해 작동합니다.Entity Framework에서 생성 된 쿼리의 하위 케이싱
이것은 함수의 실행에서 데이터를 보유하는 내 POCO입니다. fnrbreportinfo
함수 이름이고 @reportId
함수 파라미터이다
public class RBReportInfo
{
[Key]
public int ReportId { get; set; }
public int ReportDataViewId { get; set; }
}
이
는 EF 의해 생성되는 코드이다.SELECT
[Extent1].[ReportId] AS [ReportId],
[Extent1].[ReportDataViewId] AS [ReportDataViewId]
FROM [dbo].[fnrbreportinfo](@reportId) AS [Extent1]
아래 코드는 POCO를 채우기 위해 실행됩니다.
var idParameter = new ObjectParameter("reportId", reportId);
return ((IObjectContextAdapter)this).ObjectContext.CreateQuery<RBReportInfo>(
$"[{nameof(ReportBuilderContext)}].[fnrbreportinfo](@reportId)", idParameter);
이 코드는 쿼리에서 소문자 데이터베이스 열 이름과 일치하는 속성의 경우를 변경하는 OnModelCreating()
방식으로 구현된다.
modelBuilder.Properties().Configure(c =>
{
var name = c.ClrPropertyInfo.Name.ToLower();
c.HasColumnName(name);
});
따라서 EF에서 생성 된 쿼리는 열 이름이 소문자 인 곳에서 아래와 같아야합니다.
SELECT
[Extent1].[reportid] AS [ReportId],
[Extent1].[reportdataviewid] AS [ReportDataViewId]
FROM [dbo].[fnrbreportinfo](@reportId) AS [Extent1]
나는 소문자하기 위해 노력하고 속성 이름을 변경 시도했지만 그것은 C#에서 속성 이름에 대한 PascalCase 규칙을 나누기.
public class RBReportInfo
{
[Key]
public int reportid { get; set; }
public int reportdataviewid { get; set; }
}
나는 또한 속성을 사용하여 시도했지만 역시 실패했습니다.
[Column("reportid")]
public int ReportId{get;set;}
모든 테이블/기능이 소문자가되므로 대소 문자를 구분하는 데이터베이스가 필요합니다.
"요구 사항은 대소 문자를 구분하는 데이터베이스로 인해 모든 테이블/기능이 소문자로되어 있기 때문입니다." SQL Server를 사용하지 않을 것을 제안합니다. 사용중인 데이터베이스 엔진 및 Entity Framework 공급자를 명시하십시오. 그것은 EF 공급자 (비 - 마이크로 소프트)처럼 버그가 있습니다. – Aron