1. ホーム
  2. entity-framework

[解決済み] Entity FrameworkとSQL Server View

2022-06-12 16:10:57

質問

私たちは、Sql Server 2005 データベース上で次のようなビューを定義しています。

CREATE VIEW [dbo].[MeterProvingStatisticsPoint]
AS
SELECT
    CAST(0 AS BIGINT) AS 'RowNumber',
    CAST(0 AS BIGINT) AS 'ProverTicketId',
    CAST(0 AS INT) AS 'ReportNumber',
    GETDATE() AS 'CompletedDateTime',
    CAST(1.1 AS float) AS 'MeterFactor',
    CAST(1.1 AS float) AS 'Density',
    CAST(1.1 AS float) AS 'FlowRate',
    CAST(1.1 AS float) AS 'Average',
    CAST(1.1 AS float) AS 'StandardDeviation',
    CAST(1.1 AS float) AS 'MeanPlus2XStandardDeviation',
    CAST(1.1 AS float) AS 'MeanMinus2XStandardDeviation'
WHERE 0 = 1

このクエリに基づいてEntity Frameworkがエンティティを作成するというもので、実際に作成されましたが、以下のような内容のエラーで生成されます。

警告 6002。テーブル/ビュー 'Keystone_Local.dbo.MeterProvingStatisticsPoint' には主キーが定義されていません。キーは推論され、定義は読み取り専用のテーブル/ビューとして作成されました。

そして、CompletedDateTimeフィールドがこのエンティティの主キーになることを決定しています。

モデルの生成にEdmGenを使用しています。エンティティフレームワークに、このビューのどのフィールドも主キーとして含めない方法はありますか?

どのように解決するのですか?

同じ問題が発生し、これが解決策です。

エンティティフレームワークが主キーとしてカラムを使用するように強制するには、ISNULLを使用します。

エンティティフレームワークが主キーとしてカラムを使用しないようにするには、NULLIFを使用します。

これを適用する簡単な方法は、ビューのselect文を別のselectで包むことです。

例を挙げます。

SELECT
  ISNULL(MyPrimaryID,-999) MyPrimaryID,
  NULLIF(AnotherProperty,'') AnotherProperty
  FROM ( ... ) AS temp