Я создал свою временную таблицу, следуя инструкциям по этой ссылке " Cutting Edge - мягкие обновления с временными таблицами "
Процедура обычно состоит из двух шагов:
- создать обычную таблицу; это именно та работа, которую Code First обычно выполняет
- изменить таблицу, добавив столбцы
SysStartTime
, SysEndTime
и включив параметр SYSTEM_VERSIONING
Пока все выглядит хорошо.
Однако обратите внимание, что у класса сущностей нет свойства SysStartTime
и SysEndTime
, поскольку они добавляются позже. Это доставляет мне неприятности, так как мне нужно получить информацию SysStartTime
из таблицы.
Мой вопрос: как я могу получить его с Entity Framework?
Ссылка также говорит:
В EF 6 вы можете использовать только метод SqlQuery класса DbSet:
using (var db = new EF6Context())
{
var current = db.Bookings.Single(b => b.Id == 1);
var time = DateTime.Now.AddMinutes(-5);
var old = db.Bookings
.SqlQuery("SELECT * FROM dbo.Bookings
FOR SYSTEM_TIME AS OF {0} WHERE Id = 1", time)
.SingleOrDefault();
}
Обратите внимание, что для EF 6 имена столбцов, возвращаемые в запросе, должны совпадать с именами свойств в классе. Это потому, что SqlQuery не использует сопоставления. Если имена столбцов и свойств не совпадают, вам нужно будет создать псевдоним столбцов в списке SELECT, а не просто SELECT *.
Понятия не имею, как это сделать или это решит мою проблему. У кого-нибудь есть опыт по этому поводу?
Я могу придумать одно решение - добавить дополнительный столбец AppliedTime
в мою таблицу, добавив AppliedTime
в мой класс сущностей. Он имеет (почти, но достаточно для меня) то же значение, что и SysStartTime
.
Другим решением может быть использование простого SQL для непосредственного запроса к таблице.
Спасибо.