she*_*nku 6 c# fluent-migrator
我正在使用fluentmigrator向表中添加新列.然后,我想要使用该列的唯一值更新表中的每一行.
目前我使用时:
Update.Table("Foo").InSchema("dbo").Set(new { Bar = Bar.Generate() }).AllRows();
Run Code Online (Sandbox Code Playgroud)
它为所有行提供相同的值.
我如何确保它为每一行调用该方法?
我不确定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 的非标准功能可以帮到你.