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

时间:2012-09-04 05:48:57

标签: c# fluent-migrator

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

目前我使用时:

Update.Table("Foo").InSchema("dbo").Set(new { Bar = Bar.Generate() }).AllRows();

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

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

1 个答案:

答案 0 :(得分:7)

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

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

Execute.Sql("update dbo.Foo set Bar = NEWID()");

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

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

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

您还没有提到您正在使用哪个数据库。但有些像Postgres的non-standard features可以帮到你。