我使用fluentmigrator一个新列添加到表中。 然后我想与该列的唯一值来更新表中的每一行。
目前,当我使用:
Update.Table("Foo").InSchema("dbo").Set(new { Bar = Bar.Generate() }).AllRows();
它给所有行相同的值。
我如何确保它要求每一行的方法?
我使用fluentmigrator一个新列添加到表中。 然后我想与该列的唯一值来更新表中的每一行。
目前,当我使用:
Update.Table("Foo").InSchema("dbo").Set(new { Bar = Bar.Generate() }).AllRows();
它给所有行相同的值。
我如何确保它要求每一行的方法?
我不知道Bar.Generate做什么,但我猜测它会创建一个GUID或唯一的ID。
如果是这样,那么你可以使用:
Execute.Sql("update dbo.Foo set Bar = NEWID()");
或者,如果你想连续的GUID,那么你可以使用NEWSEQUENTIALID() 。
如果要为这种独特的identier添加一个新列,那么所有你需要做的就是指定新的列.AsGuid()
编辑:FluentMigrator是一个小流利DSL,并不意味着覆盖这样的复杂情况。 有没有办法(据我所知)一个SQL UPDATE,因此没有简单的方法与FluentMigrator做到这一点做到这一点。 你必须获得与ADO.NET或ORM(小巧玲珑/ NHibernate的),然后遍历每行表中的行数和更新与自定义唯一标识符栏列。 所以,如果你有一个百万行,那么你将不得不作出百万SQL更新。 如果你可以重写你的Bar.Generate()方法,即是基于NEWID()之类的函数SQL函数这个还是这个 ,那么你可以做到这一点作为一个UPDATE语句,并与FluentMigrator的Execute.Sql方法调用它。
你没有提到你正在使用的数据库。 但一些喜欢的Postgres有非标准的特性 ,可以帮助你。