c# – 在Entity Framework数据库迁移期间如何运行自定义代码?

我有一个非常简单的Entity Framework 5 DbMigration,它将一个新的布尔列添加到一个包含数千条记录的现有表中.我希望根据同一个表中另外两列中的值来设置每个现有行的该列的初始值.这应该只影响现有记录,因此只应在执行迁移时运行,并且永远不会再运行.

这基本上是需要执行的逻辑:

var users = (from u in context.Users select u).ToList();
users.ForEach(u =>
{
    u.MyNewBoolColumn = (u.Column1 != null && u.Column2 == "some-value");
    context.Users.AddOrUpdate(u);
});

我可以想到两种选择,但我不喜欢它们中的任何一种:

>创建两个单独的迁移,因为该列在第一个完成之后才会存在.这看起来很草率,我也不确定如何在第二次迁移中获取数据库上下文以实际执行更新.
>在DbMigrationsConfiguration实现中运行代码.但是,此代码将每次运行,我将无法判断它是否已运行且不应更新记录.

还有另一种更好的选择吗?

最佳答案 迁移表示模式的更改,因此您无法在迁移中使用AddOrUpdate()内容.但你可以,这就是我建议你使用Sql()方法运行纯SQL代码.

点赞