Я пытался расширить свое понимание EF от простого запроса таблиц к созданию сущностей, соответствующих моим бизнес-объектам, чтобы я мог кодировать против своих бизнес-объектов, а не своих объектов данных. Я читаю статьи, которые предполагают, что это возможно, но все их примеры довольно тривиальны и включают просто объединение двух таблиц. Моя ситуация немного сложнее, и я не знаю, как поступить.
У меня есть две таблицы (упрощенно ниже)
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()
)
Так что, если я присоединяюсь к этим таблицам для определенного BarGUID, поэтому, если бы у меня было зарегистрировано 1 столбец и 4 столбца, у меня было бы 4 строки, но я хочу только самый последний BarEventTime. Поэтому я хотел бы присоединиться и иметь только одну строку:
Я могу сделать это тривиально в 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 и каким-то образом поместить эту логику в мою сущность LogItem, а затем написать запросы против этого. Моя проблема в том, что я вижу тривиальные условия соединения, только когда пытаюсь объединить свои таблицы в определениях сущностей. Есть ли способ сделать это? Или гид?
Любая помощь будет оценена.
Спасибо.