ここでは、http://www.entityframeworktutorial.net/EntityFramework5/table-valued-function-in-entity-framework5.aspx(EF6を使用)の説明に従ってテーブル値関数を作成し、それをmy edmxにインポートしました。 この後、Returns a collection of
を自分のエンティティMyTable
(機能内で選択)に変更しました。すべてのエンティティタイプのキープロパティは、ストレージ関数によって返されるnull不可能な同じ列にマップする必要があります
しかし、私は常に例外
にストレージ機能によって返された同じ非NULL可能列にマップされなければならない関数インポートによって返されるすべてのエンティティタイプのキープロパティを取得します。
私は生成された複素結果、オブジェクトに見ると、すべてのプロパティがnullable
ですが、私のエンティティMyTable
に、私はそうでないにマップします。 SQL-サーバー内で実行すると、期待どおり
CREATE FUNCTION [dbo].[fnGetChildren]
(
-- Add the parameters for the function here
@Id uniqueidentifier
)
RETURNS TABLE
AS
RETURN
(
-- Add the SELECT statement with parameter references here
WITH childs AS
(
SELECT * FROM MyTable WHERE Id = @Id
UNION ALL
SELECT MyTable.* FROM MyTable JOIN childs ON MyTable.ParentId = childs.Id
)
SELECT * FROM childs WHERE Id <> @Id
)
機能が動作します:
この
は(エンティティ自体を除いて指定されたエンティティからすべての子-関係を取得するために)私の関数です。 edmx生成もまた実行されます。しかし、DbContext
でクエリを実行しようとすると、このエラーが発生します(関数のインポートを呼び出すかどうかにかかわらず)。
これは機能自体、EFに問題があるのですか、それとも別の問題がありますか?
あなたは、非NULL可能値を認識するためにEFを強制するために、あなたのSELECT
リスト内のキー列の
ISNULL
を使用することができます
私はすべての列を選択しなければならないのですが、私のエンティティではヌル可能ではないものは 'ISNULL'によってsourroundされるべきですか? – KingKerosin
@KingKerosin、はい、あなたがする必要があります。 – Sefe
BTW: '再帰的な共通テーブル式 '子'にはトップレベルのUNION ALL演算子が含まれていません。 ' – KingKerosin