2012-09-04 16 views
5

kullanarak satır başına yeni bir değerle güncelleyin Tabloya yeni bir sütun eklemek için fluentmigrator kullanıyorum. Daha sonra, tablodaki her satırı o sütunda benzersiz bir değerle güncellemek istiyorum.Satır verilerini fluentmigrator

Şu anda kullandığınızda: Tüm satırlar için aynı değeri verir

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

.

Her satır için bu yöntemi çağırdığından nasıl emin olabilirim?

cevap

7

Bar.Generate'ın ne yaptığından emin değilim, ancak bir GUID veya benzersiz bir kimlik oluşturduğunu tahmin ediyorum.

yüzden ardından kullanmak olsaydı: Eğer sıralı GUID'lerine istiyorsanız

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

Ya o zaman NEWSEQUENTIALID() kullanabilirsiniz.

bu benzersiz identier için yeni bir sütun ekleyerek, o zaman yapmanız gerekir tüm yeni sütunu belirtmek .AsGuid olan()

DÜZENLEME: FluentMigrator küçük akıcı DSL ve kapsaması anlamına gelmez Bunun gibi karmaşık bir dava. Bunu bir sql UPDATE ile yapmanın (ve bildiğim kadarıyla) bir yolu yoktur ve bu yüzden FluentMigrator ile yapmanın kolay bir yolu yoktur. ADO.NET veya bir ORM (Dapper/NHibernate) ile tablo için satır sayısını almak ve sonra her satırda döngü ve özel benzersiz tanıtıcı ile Bar sütununu güncelleştirmeniz gerekir. Yani bir milyon satırınız varsa, bir milyon sql güncellemesi yapmanız gerekecektir. Bar.Generate() yönteminizi, this veya this gibi NEWID() işlevine dayanan bir Sql işlevi olarak yeniden yazabilirseniz, bunu bir UPDATE deyimi olarak yapabilir ve FluentMigrator'ın Execute.Sql yöntemiyle çağırabilirsiniz.

Hangi veritabanında çalıştığınızdan bahsetmediniz. Ama bazı Postgres gibi size yardımcı olabilecek non-standard features var.

+0

kendi özelliğim olan ve benzersiz bir "arkadaşça" dizesi yaratan kendi işlevim. – shenku

+2

İşlevinizi bir SQL işlevi olarak yeniden yazabilir misiniz? Aksi halde, tablonuzdaki tüm satırları dolaşmanız gerekir. –

+1

Kod örneğinizde, 'table' anahtar kelimesi orada olmamalıdır, komut çalıştırılmayacaktır. Gerçek tablo adınızla değiştirin. – shanabus