私はかなり複雑なSQL文を結合しています。ここで私のコードはEFを使用しています:efエンティティで(linq?)を使用する
var MicrositeResponseAdors = _context.MicrositeResponseAdor
.Include(user => user.UserTracking)
.ThenInclude(tracking => tracking.AddTradeIn)
.Include(user => user.UserTracking)
.ThenInclude(tracking => tracking.TrackingFinance)
.Include(user => user.UserTracking)
.ThenInclude(tracking => tracking.SearchTracking)
.Include(user => user.UserTracking)
.ThenInclude(tracking => tracking.TrackingType)
.Include(user => user.UserTracking)
.ThenInclude(tracking => tracking.Vehicle)
.FirstOrDefault(m => m.Id == id && m.FirstName.ToLower() != "test" && m.LastName.ToLower() != "test");
私はエンティティフレームワークが許可しない主キーを持たないテーブルに別の結合を追加する必要があります。私はそれを偽造することさえできませんでした。だから私はLINQと呼ばれるものを使って何かをより慣れさせるように言われましたか?
データ値に元のEFエンティティクラスを割り当てる方法がわかりません。
var MicrositeResponseAdors = (from p in _context.MicrositeResponseAdor
join c in _context.UserTracking on p.Id equals c.UserTrackingId
into pc
select new {
MicrositeResponseAdor = p, MicrositeResponseAdor.UserTracking = pc
}
).FirstOrDefault();
これが与える:
無効な匿名型のメンバ宣言子をここに私はこれまで持っているものです。
私はMicrositeResponseAdor.UserTrackingの最初の部分のためだと思います。 MicrositeResponseAdorの下でUserTrackingを割り当てる方法がわかりません。
ORMの結合は非常に強いにおいです。 ORMは*関係*を持つオブジェクト*を扱います。 ORMはデータベースではなく、LINQはSQLの代替品ではありません。 –
MicroSiterResponseAdorクラスに別の*関係*を追加する必要があります。たぶん 'public UserTracking UserTracking {get; set;}'でしょう。 EFはテーブル、フィールドがそれらのように見える表記規則に従うと、関係を検出します。クエリはまったく変更する必要はありません –
BTW投稿したEFコードに結合が表示されません。 *単一のエンティティの読み込みのみ。それらを「含む」は熱心な読み込みを強制しますが、結合とはまったく関係ありません。あなたは熱心な読み込みを必要としない場合でもそれらを取り除くことができます –