2014-06-11 52 views
3

在遷移過程中,我如何插入到我的表中,然後檢索該標識,然後使用它將相關數據插入到另一個表中。如何在遷移過程中檢索插入的標識FluentMigrator

我現在擁有的是一個hardoced ID,但我不知道當我運行遷移時會發生什麼。

var contactId = 2; 
var phoneNumber = 2; 

Insert.IntoTable("Contacts") 
    .WithIdentityInsert() 
    .Row(new 
    { 
     Id = contactId, 
     TimeZoneId = contact.TimeZoneId, 
     contact.CultureId, 
     Type = (byte)(int)contact.Type, 
     Email = contact.Email.ToString(), 
     EntityId = entityId 
    }); 

Insert.IntoTable("PhoneNumbers") 
    .WithIdentityInsert() 
    .Row(new 
    { 
     Id = phoneNumberId, 
     phone.Number, 
     Type = (byte)(int)phone.Type, 
     ContactId = contactId 
    }); 

我希望能夠檢索插入的ID並將其用於第二次插入而不是對其進行編碼。

我使用SQL服務器,如果是任何幫助......

我認爲這將是微不足道的,但好像不是,google搜索它,這裏沒有任何seing應答後。

+0

我不確定這是否適用於'fluent-migrator'的上下文中,但是你看過'@@ IDENTITY'嗎? (這是一個tsql系統函數。)http://msdn.microsoft.com/en-us/library/ms187342(v=sql.105).aspx – DMason

+0

@DMason我知道如何在SQL中完成它,我想要什麼知道如何用FluentMigrator來做到這一點。或者如何在使用fluentmigrator插入後獲得@@ Identity選擇 –

+0

自從我使用FluentMigrator代碼以來,我已經有一段時間了,但在快速瀏覽之後,我看不到一種方法來執行此操作,所以它必須是一個新功能。我不確定您對代碼的熟悉程度,但您可以對https://github.com/schambers/fluentmigrator/blob/master/src/FluentMigrator.Runner/Generators/SqlServer/SqlServerQuoter.cs進行更改類,如果你放入@@ IDENTITY,它不會嘗試把它當作一個字符串。 – Castrohenge

回答

0

我在SQL查詢使用Execute.Sql()@@IDENTITY對同一案件

+0

Execute.Sql()返回一個void,所以您將無法從執行的語句中獲取標識。 – krillgar

+0

我的意思是將@@ IDENTITY用於sql-query:Execute.Sql(「Insert ...; Insert ... values(@@ IDENTITY,...)」)。如果你想在c#代碼中使用標識 - 你可以使用Dapper例如:int id = connection.Query (「Select @@ IDENTITY」)。Single(); – razon

1

您可以通過您的.Row()電話後鏈接.WithInsertIdentity()手動插入的ID。

這將讓你保存在內存中作爲外鍵在其他對象中使用。不幸的是,直到Up()Down()方法中的所有代碼完成執行之後,FluentMigrator纔會真正執行任何SQL。

相關問題