1

В основном, в моей базе данных EF я добавил строку DateTime в свою таблицу, используя сначала код EF.Запуск пользовательского кода при применении сценария миграции

Вот как сейчас:

public class Employee 
    { 
     [Key] 
     public int Id { get; set; } 

     public DateTime Date { get; set; } //this has been added 
    } 

Как вы видите, дата не обнуляемая - поэтому мне нужно сначала заполнить даты, когда я запускаю миграцию.

Вот сгенерированный скрипт миграции:

public partial class Changed_Employee : DbMigration 
    { 
     public override void Up() 
     { 
      AddColumn("dbo.Employees", "Date", c => c.DateTime(nullable: false)); 
     } 
    } 

Дело в том, я хотел бы выполнить некоторые # пользовательскую логику C для того, чтобы определить точную дату каждого отдельного «Сотрудник».

Однако, как бы я это сделал?

ответ

1

Самый простой способ сделать это:

Во время миграции установить все даты/времени 00.00.0000

Sql("UPDATE Employees SET Date= -DATEDIFF(MINUTE, CurrentTime, 0)"; 

Когда приложение, запущенное вы можете создать метод пользовательских семян, которые используют C# для обновления данные:

Плюсы: Очень легко

Минусы: Если у вас многоуровневые уровни миграции, вы потеряете некоторую миграционную логику (преобразование по времени). Данные будут преобразованы позже при запуске приложения.

Кстати, возможно, вам также нужно установить столбец Date как nullable и заполнить его данными, а затем в конце скрипта изменить таблицу и изменить столбец на nullable, иначе миграция не будет работать.

AddColumn("dbo.Employees", "Date", c => c.DateTime(nullable: true)); 
.. 
.. 
.. 
Sql("Update....") 
.. 
.. 
AlterColumn("dbo.Employees", "Date", c => c.DateTime(nullable: false)); 

Для различных подходов вы должны прочитать мой пост здесь: Read database during an entity framework migration (select query)

+0

Спасибо за ваш ответ. Логика для запуска находится на C#, поэтому я предполагаю, что смогу реализовать ее между ними. Кстати, «разные подходы» вы связали с ссылками на эту тему. Не могли бы вы исправить эту ссылку? –

+0

@ J.Doe У меня есть ответ. –

+1

Большое спасибо за ваш ответ :) Отлично работает! –

Смежные вопросы