テーブルを照会するだけでビジネスオブジェクトと一致するエンティティを作成するようにEFの理解を深めようとしています。私はこれが可能であることを示唆する記事を読んでいるが、それらの例はいずれもほんのわずかであり、2つのテーブルを組み合わせるだけである。私の状況はもう少し複雑で、どのように進むべきかわかりません。Entity Framework 4.1で複数の行を1つのエンティティに結合する
私は(以下に簡略化)二つの表
CREATE TABLE [dbo].[BarEvents]
(
[BarGUID] UNIQUEIDENTIFIER NOT NULL DEFAULT NEWSEQUENTIALID(),
[Bar] INT NULL
)
CREATE TABLE [dbo].[BarLog]
(
[BarGUID] UNIQUEIDENTIFIER NOT NULL,
[BarLogGUID] UNIQUEIDENTIFIER NOT NULL DEFAULT NEWSEQUENTIALID(),
[BarEventTime] DATETIME NOT NULL DEFAULT GETUTCDATE()
)
を持って、私はこれらのテーブルを結合する場合、私は1バーと4つのバーのイベントが記録持っていたので、もしそのため、特定のBarGUIDのために、私は4行を持っていると思います、しかし、私が望むのはちょうど最新のBarEventTimeです。だから私は参加したいとちょうど1行必要があります:
私はEFで自明これを行うことができます:
var query = barEntities.BarEvents.Where(q=> q.BarGUID = '0000-0000-0000-0000')
.Select(barEvent =>
new LogItem()
{
Bar = barEvent.Bar,
BarEventTime = barEvent.BarLog.Max(u => u.BarEventTime)
});
しかし、私は何を読んでから、私はロジテムエンティティを定義することができるはずがあり、この論理を何らかの形でLogItemエンティティに配置し、それに対してクエリを作成します。私の問題は、私がエンティティ定義で自分のテーブルに参加しようとしているときに、些細なジョイン条件しか見ないということです。これを行う方法はありますか?またはガイド?
ご協力いただければ幸いです。
ありがとうございます。
これは1つのオプションです。私はこれを行うためにsprocを書くことができ、EFでsprocを使うことができます。または、私の現在の質問に固執するだけです。私はちょうどエンティティ定義自体の中でこれを達成する方法があると思っていたと思います。編集:明確にするために、私たちのDBAは毎日SQL Server側のすべてをロックしていますので、sprocs/viewsを避けることがEFにスワッピングする私の目標の一部でした。 – Dio