基本上,在我的EF数据库中,我首先使用EF代码向我的表添加了一个DateTime行。
现在的情况如下:
public class Employee
{
[Key]
public int Id { get; set; }
public DateTime Date { get; set; } //this has been added
}
如您所见,Date不可为空 - 因此我需要在运行迁移时首先填充日期。
以下是生成的迁移脚本:
public partial class Changed_Employee : DbMigration
{
public override void Up()
{
AddColumn("dbo.Employees", "Date", c => c.DateTime(nullable: false));
}
}
问题是,我想运行一些自定义C#逻辑,以确定每个“员工”的确切日期。
但是,我该怎么做?
答案 0 :(得分: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)