Entity Framework Core 3.1 с временными таблицами — доступ к SysStartTime и SysEndTimeC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Entity Framework Core 3.1 с временными таблицами — доступ к SysStartTime и SysEndTime

Сообщение Anonymous »

Я создал темпоральные таблицы на основе документов Microsoft SQL Создание темпоральной таблицы с таблицей истории по умолчанию.
https://learn.microsoft.com /en-us/sql/relational-databases/tables/creating-a-system-versioned-temporal-table?view=sql-server-ver15#creating-a-temporal-table-with-a-default-history-table
Миграция:
public partial class Temporaltables : Migration
{
List tablesToUpdate = new List
{
"Images",
"Languages",
"Questions",
"Texts",
"Medias",
};

protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.Sql($"CREATE SCHEMA History");
foreach (var table in tablesToUpdate)
{
string alterStatement = $@"ALTER TABLE [{table}] ADD SysStartTime datetime2(0) GENERATED ALWAYS AS ROW START HIDDEN
CONSTRAINT DF_{table}_SysStart DEFAULT GETDATE(), SysEndTime datetime2(0) GENERATED ALWAYS AS ROW END HIDDEN
CONSTRAINT DF_{table}_SysEnd DEFAULT CONVERT(datetime2 (0), '9999-12-31 23:59:59'),
PERIOD FOR SYSTEM_TIME (SysStartTime, SysEndTime)";
migrationBuilder.Sql(alterStatement);
alterStatement = $@"ALTER TABLE [{table}] SET (SYSTEM_VERSIONING = ON (HISTORY_TABLE = History.[{table}]));";
migrationBuilder.Sql(alterStatement);
}
}

protected override void Down(MigrationBuilder migrationBuilder)
{
foreach (var table in tablesToUpdate)
{
string alterStatement = $@"ALTER TABLE [{table}] SET (SYSTEM_VERSIONING = OFF);";
migrationBuilder.Sql(alterStatement);
alterStatement = $@"ALTER TABLE [{table}] DROP PERIOD FOR SYSTEM_TIME";
migrationBuilder.Sql(alterStatement);
alterStatement = $@"ALTER TABLE [{table}] DROP DF_{table}_SysStart, DF_{table}_SysEnd";
migrationBuilder.Sql(alterStatement);
alterStatement = $@"ALTER TABLE [{table}] DROP COLUMN SysStartTime, COLUMN SysEndTime";
migrationBuilder.Sql(alterStatement);
alterStatement = $@"DROP TABLE History.[{table}]";
migrationBuilder.Sql(alterStatement);
}
migrationBuilder.Sql($"DROP SCHEMA History");
}
}

Полный пример настройки темпоральных таблиц:
https://stackoverflow.com/a/64244548/3850405
Это работает очень хорошо, но теперь я хочу получить доступ к значению SysStartTime.
Что я пробовал:
[DatabaseGenerated(DatabaseGeneratedOption.Computed)]
public DateTime SysStartTime { get; set; }

ApplicationDbContext.cs:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{...

foreach (var et in modelBuilder.Model.GetEntityTypes())
{
foreach (var prop in et.GetProperties())
{
if (prop.Name == "SysStartTime" || prop.Name == "SysEndTime")
{
prop.ValueGenerated = Microsoft.EntityFrameworkCore.Metadata.ValueGenerated.OnAddOrUpdate;
}
}
}

и
modelBuilder.Entity(e =>
{
e.Property(p => p.SysStartTime).ValueGeneratedOnAddOrUpdate();
});

Каждая миграция приводит к следующему:
migrationBuilder.AddColumn(
name: "SysStartTime",
table: "Questions",
type: "datetime2(0)",
nullable: false,
defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));

Это, конечно, приводит к следующей ошибке в команде Update-Database:

Имена столбцов в каждая таблица должна быть уникальной. Имя столбца 'SysStartTime' в
таблице '' указано более одного раза.

Я читал оба этих вопроса и, похоже, так и есть. работал в Entity Framework Core 2.2:
Net Core: Entity Framework и временные таблицы SQL Server, автоматическое формирование шаблонов
Entity Framework Core и SQL Server 2016 темпоральные таблицы
Пытался отключить HIDDEN, но не помогло
SQL:
ALTER TABLE [dbo].Questions ALTER COLUMN SysStartTime DROP HIDDEN;


Подробнее здесь: https://stackoverflow.com/questions/646 ... nd-sysendt
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Вставьте новую запись с таблицами соединения в Entity Framework Core.
    Гость » » в форуме C#
    0 Ответы
    49 Просмотры
    Последнее сообщение Гость
  • Entity Framework Core 8. Ошибка случайной ссылки на объект FindAsync @ System.Data.Entity.Core.Common.Internal.Materiali
    Anonymous » » в форуме C#
    0 Ответы
    46 Просмотры
    Последнее сообщение Anonymous
  • Ошибка ASP.NET с таблицами ToListAsync для Entity Framework
    Anonymous » » в форуме C#
    0 Ответы
    20 Просмотры
    Последнее сообщение Anonymous
  • Ошибка ASP.NET с таблицами ToListAsync для Entity Framework
    Anonymous » » в форуме C#
    0 Ответы
    26 Просмотры
    Последнее сообщение Anonymous
  • Ошибка ASP.NET с таблицами ToListAsync для Entity Framework
    Anonymous » » в форуме C#
    0 Ответы
    27 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»