使用fluentmigrator更新每行新值的行数据

she*_*nku 6 c# fluent-migrator

我正在使用fluentmigrator向表中添加新列.然后,我想要使用该列的唯一值更新表中的每一行.

目前我使用时:

Update.Table("Foo").InSchema("dbo").Set(new { Bar = Bar.Generate() }).AllRows();
Run Code Online (Sandbox Code Playgroud)

它为所有行提供相同的值.

我如何确保它为每一行调用该方法?

Dan*_*Lee 9

我不确定Bar.Generate会做什么,但我猜它会创建一个GUID或唯一ID.

如果是这样,那么你可以使用:

Execute.Sql("update dbo.Foo set Bar = NEWID()");
Run Code Online (Sandbox Code Playgroud)

或者如果你想要顺序guid,那么你可以使用NEWSEQUENTIALID().

如果要为此唯一标识符添加新列,那么您需要做的就是指定新列.AsGuid()

编辑:FluentMigrator是一个小的流利的dsl,并不打算涵盖这样的复杂案例.使用一个sql UPDATE没有办法(据我所知)这样做,因此没有简单的方法来使用FluentMigrator.您必须使用ADO.NET或ORM(Dapper/NHibernate)获取表的行数,然后遍历每一行并使用自定义唯一标识符更新Bar列.因此,如果你有一百万行,那么你将不得不进行一百万次sql更新.如果你可以重写你的Bar.Generate()方法,即是基于NEWID()之类的函数SQL函数这个还是这个,那么你可以做到这一点作为一个UPDATE语句,并与FluentMigrator的Execute.Sql方法调用它.

您还没有提到您正在使用哪个数据库.但有些像Postgres 的非标准功能可以帮到你.

  • 你可以将你的函数重写为SQL函数吗?否则,您将需要循环遍历表中的所有行. (3认同)