コードファーストエンティティフレームワークを介して関数を実行する際に、カラム名を小文字にする必要があります。私はthis linkで解決策を使用しようとしましたが、テーブルマッピングと関数マッピングでは機能しません。Entity Frameworkによって生成されたクエリの下部ケーシング
これは、関数の実行からデータを保持する私のPOCOです。
public class RBReportInfo
{
[Key]
public int ReportId { get; set; }
public int ReportDataViewId { get; set; }
}
これはfnrbreportinfo
関数名であり、@reportId
関数パラメータである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 Providerを明記してください。それはEFプロバイダー(非マイクロソフト)のバグがあるように聞こえます – Aron