Ядро entityframework и временные таблицы sql 2016

Мы используем efcore и sql 2016 для нашего.net core web api. Я оцениваю использование временных таблиц и их влияние на код efcore. когда я генерирую модель ef, используя строку cmd, он генерирует модель с appstart, append и mappings в dbcontext. когда я делаю вставку / обновление, они терпят неудачу, говоря, что эти столбцы не могут быть обновлены. Мне пришлось удалить appstart, end из модели и отображение dbcontext, чтобы это работало. Я читал, что в efcore, как ef6.x, пока нет возможности перехвата. пожалуйста, посоветуйте лучшее решение для этого.

5 ответов

Решение

Я попробовал ниже варианты, и они работают.

  1. вариант 1: удалено приложение, добавлены поля из сущностей и сопоставления dbcontext, а обновления / вставки начали работать правильно.

  2. вариант 2: украсить столбцы периода с атрибутами, как показано ниже.

[DatabaseGenerated (DatabaseGeneratedOption.Computed)] public DateTime StartTime {get; задавать; }

[DatabaseGenerated (DatabaseGeneratedOption.Computed)] public DateTime EndTime {get; задавать; }

В настоящее время нет лучшего решения для этого, и эта функция находится в бэклоге https://github.com/aspnet/EntityFramework/issues/2229

Я думаю, что для этого есть лучшее решение: создать частичный файл контекста (чтобы предотвратить повторное внесение изменений после повторного создания модели) следующим образом

public partial class DatabaseDBContext : DbContext
{
    partial void OnModelCreatingPartial(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Table1>(entity =>
        {
            entity.Property(e => e.StartTime)
                .ValueGeneratedOnAddOrUpdate();
            entity.Property(e => e.EndTime)
                .ValueGeneratedOnAddOrUpdate();
        });
    }
}

Устранение этой проблемы должно быть сделано путем скрытия столбца начала периода (StartTime) и столбца конца периода (EndTime). Мы можем сделать это

ALTER TABLE [dbo].[Table1] ALTER COLUMN [StartTime] ADD HIDDEN;
ALTER TABLE [dbo].[Table1] ALTER COLUMN [EndTime] ADD HIDDEN;

Мы можем видеть настройки скрытых для этих столбцов в таблице sys.columns

SELECT * FROM sys.columns WHERE is_hidden = 1 

.NET 6 и Entity Framework Core 6.0 поддерживают временные таблицы SQL Server по умолчанию.

См. этот ответ для примеров:

https://stackoverflow.com/a/70017768/3850405

Другие вопросы по тегам