ここで説明されているようにテーブル値関数を作成しましたhttp://www.entityframeworktutorial.net/EntityFramework5/table-valued-function-in-entity-framework5.aspx(EF6を使用)そしてそれをedmxにインポートしました。この後、Returns a collection of
を自分のエンティティMyTable
(関数内で選択されている)に変更しました。
ただし、常に例外が発生します
関数importによって返されるすべてのエンティティタイプのキープロパティは、storage関数によって返される同じnull許容でない列にマップする必要があります。
生成された複雑な結果オブジェクトを調べると、すべてのプロパティがありますnullable
が、エンティティMyTable
にマップしたいのですが、そうではありません。
これは私の関数です(エンティティ自体を除く特定のエンティティからすべての子関係を取得するため):
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
)
この関数は、sql-server内で実行すると期待どおりに機能します。edmx-generationも実行されます。しかし、DbContext
Iを使用してクエリを実行しようとすると、このエラーが発生しました(function-importを呼び出すかどうかは関係ありません)。
これは関数自体、EFの問題ですか、それとも他に何か問題がありますか?
リストのISNULL
キー列にを使用して、SELECT
EFに値をNULL不可として認識させることができます。
WITH childs AS
(
SELECT Id FROM MyTable WHERE Id = @Id
UNION ALL
SELECT MyTable.Id FROM MyTable JOIN childs ON MyTable.ParentId = childs.Id
)
SELECT ISNULL(Id, 0) FROM childs WHERE Id <> @Id
でこれを行うことはできSELECT *
ませんが、とにかくそれを行うべきではありません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加