質問: await module1Ctx.Posts.FromSql("select * from `module1db`.`posts` as `p` inner join `maindb`.`users` as `u` on `p`.`AuthorId`=`u`.`Id` where ").ToListAsync(); ``` これが実行されると、「シーケンスに複数の要素が含まれている」というSQL例外が表示されます。 `p` 。*を選択するとうまくいきますが、ユーザーデータも取得する必要があります。 Postエンティティには、EFが2つのデータベースを自動的に結合できないため、ユーザーID(public long AuthorId {get; set;})への参照と、偽のナビゲーションプロパティNotMappedが含まれています。私の最初の質問は、これが可能であろうということです。私はこれがうまくいくという強い感情を持っていますが、私は何か小さいものを見逃しています。 これがうまくいかない場合は、DbContextのConnectionを使用してクエリを手動で実行することにします。これを行う場合、ユーザーデータを含む投稿のリストに結果をどのようにマップできますか?
回答: > シーケンスに複数の要素が含まれる > > これは、列が複数回表示されることを示しています。たとえば、両方のテーブルに "ModifiedDate"カラムがある場合、 `select *`すると結果セットに2回表示されます(一度`p.ModifiedDate`と`p.ModifiedDate`に1回表示され`u.ModifiedDate` 。 これに加えて、返される列はモデルと完全に一致する必要があります。モデルで定義されているプロパティは、欠落している必要がありません`p.*`そのため、 `p.*`が機能します。 あなたの場合を除きしかし、 `Post`モデルから値を表すフィールドを定義し`User`テーブルを、それが正確に一致する必要がありますので、あなたは、それらを返すことができません`Post`し、それがプロパティをマッピングしています。 Ad-hocサポート(ビューモデルのような任意のモデルへのマッピング結果)は、EntityFramework Core 1.0ではまだ実装されておらず、将来のバージョンのロードマップ上の機能です 。 EntityFrameworkのコアロードマップから: > ### 重要なO / RM機能 > > * ... > * 非Model型のRaw SQL問合せを使用すると、生SQL問合せを使用してモデルの一部ではない型(通常は非正規化されたビュー・モデル・データ用)を移入できます。 > ### 編集 また、 EFCoreのドキュメントから > ### 制限事項 > > 生のSQLクエリを使用する際に注意すべき制限事項がいくつかあります。 > > * SQLクエリは、モデルの一部であるエンティティタイプを返すためにのみ使用できます。生のSQLクエリーからアドホックタイプを返すことを可能にするバックログの強化があります。 > * SQLクエリは、エンティティタイプのすべてのプロパティのデータを返す必要があります。 > * 結果セットの列名は、プロパティーがマップされている列名と一致する必要があります。これは、生SQL問合せでプロパティ/列のマッピングが無視され、結果セットの列名がプロパティ名と一致しなければならないEF6.xとは異なります。 > * SQLクエリには関連データを含めることはできません。ただし、多くの場合、Include演算子を使用して関連データを返すことで、クエリの先頭に作成することができます(関連データの参照を参照)。 >