Entity Framework Code-First Migration не работает с SQL Server

c# entity-framework entity-framework-6

Вопрос

Используя Entity Framework 6 и SQL Server, я получаю следующую ошибку, когда EF выполняет миграцию:

Невозможно обновить базу данных в соответствии с текущей моделью, так как есть ожидающие изменения, и автоматическая миграция отключена. Либо записывайте ожидающие изменения модели в миграцию на основе кода, либо разрешайте автоматическую миграцию. Установите DbMigrationsConfiguration.AutomaticMigrationsEnabled в true, чтобы включить автоматическую миграцию.

Все работает отлично с MySQL.

Изменений не было. Запуск другой «Add-Migration» приводит к пустым методам Up () / Down ():

public partial class Two : DbMigration
{
    public override void Up()
    {
    }

    public override void Down()
    {
    }
}

Класс DbMigrationsConfiguration :

internal sealed class Configuration : DbMigrationsConfiguration<MyDBContext>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = false;
        SetSqlGenerator("System.Data.SqlClient", new SqlServerMigrationSqlGenerator());
    }

    protected override void Seed(MyDBContext context)
    {
        ...
    }
}

DbContext.OnModelCreating :

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDBContext, Configuration>());

        ...
    }

Кроме того, изучение __MigrationHistory кажется, что все в порядке.

Что я делаю не так?

Обновление. Временное включение автоматических миграций, чтобы увидеть, какие изменения он внесет, изменяет все значения точности / шкалы времени столбца с 16/7 до 8/0. Я не понимаю, почему он создает их с одной точностью, а затем хочет, чтобы у них был другой, хотя ...

Обновление 2, запросы:

Вот запросы, которые создают соответствующие таблицы:

CREATE TABLE [dbo].[Instruments] (
[ID] [int] NOT NULL IDENTITY,
[Symbol] [nvarchar](255),
[UnderlyingSymbol] [nvarchar](255),
[Name] [nvarchar](255),
[PrimaryExchangeID] [int],
[ExchangeID] [int],
[Type] [int] NOT NULL,
[Multiplier] [int],
[Expiration] [datetime],
[OptionType] [int],
[Strike] [decimal](16, 8),
[Currency] [nvarchar](25),
[MinTick] [decimal](16, 8),
[Industry] [nvarchar](255),
[Category] [nvarchar](255),
[Subcategory] [nvarchar](255),
[IsContinuousFuture] [bit] NOT NULL,
[ValidExchanges] [varchar](max),
[DatasourceID] [int] NOT NULL,
[ContinuousFutureID] [int],
[SessionsSource] [int] NOT NULL,
[SessionTemplateID] [int],
[DatasourceSymbol] [nvarchar](255),
CONSTRAINT [PK_dbo.Instruments] PRIMARY KEY ([ID])
)

CREATE TABLE [dbo].[exchangesessions] ( 
[ID] [int] NOT NULL IDENTITY,
[OpeningTime] [time](3) NOT NULL,
[ClosingTime] [time](3) NOT NULL,
[ExchangeID] [int] NOT NULL,
[IsSessionEnd] [bit] NOT NULL,
[OpeningDay] [int] NOT NULL,
[ClosingDay] [int] NOT NULL,
CONSTRAINT [PK_dbo.exchangesessions] PRIMARY KEY ([ID])
)

А вот вот запросы, сделанные автоматической миграцией:

ALTER TABLE [dbo].[Instruments] ALTER COLUMN [Expiration] [datetime]

ALTER TABLE [dbo].[exchangesessions] ALTER COLUMN [OpeningTime] [time](3) NOT NULL

ALTER TABLE [dbo].[exchangesessions] ALTER COLUMN [ClosingTime] [time](3) NOT NULL

Популярные ответы

Некоторые мысли: Date-precision - .NET / C # имеет DateTime, SQL-сервер имеет DateTime и DateTime2. Добавить конвенцию

public class DateTime2Convention : Convention
{
    public DateTime2Convention()
    {
        this.Properties<DateTime>()
            .Configure(c => c.HasColumnType("datetime2"));
    }
}

затем добавьте

modelBuilder.Conventions.Add(new DateTime2Convention());

в

protected override void OnModelCreating(DbModelBuilder modelBuilder)

Создайте аналогичный для Time, и это должно решить эту проблему.

Другая вещь, которая требуется, - это сгенерировать SQL-скрипт. Вам может потребоваться найти подпись (MigrationID) последнего обновления базы данных из таблицы __MigrationHistory и использовать ее для генерации скрипта с использованием

Update-Database -Script -SourceMigration:"201312141123260_MbrraceMigrations2" -TargetMigration:"201312191701134_MbrraceMigrations5"

или -Script использовать автоматические миграции.

Извините, это немного неоднозначный ответ, но я надеюсь, что вы пойдете.



Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему
Лицензировано согласно: CC-BY-SA with attribution
Не связан с Stack Overflow
Является ли этот КБ законным? Да, узнайте, почему