2016-01-12 17 views
1

我正在使用Azure移動服務.NET後端和Xamarin.Forms,並且遇到了使用int標識ID列的問題。在脫機場景中,我可以成功將記錄添加到數據庫,但是身份標識的CustomerId列保持爲0.一旦聯機,當我同步時,該值由SQL Server設置並填充到移動設備上。Azure移動服務標識列在離線時未分配

由於ID是必需的,因爲我還需要在另一個表中創建相關數據,問題是,在與服務器同步之前,如何獲取/設置實體的ID?我無法手動設置它,因爲它可能會與另一個客戶衝突。我起訴現有的SQL數據庫,所以寧願不必完全改變方案來改變ID來使用字符串或GUID。

public class Customer 
    { 
     [Key] 
     [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
     public int CustomerId { get; set; } 

     public string Name { get; set; } 

     .... 
    } 

    public async Task SaveCustomer(Customer item) { 
     await CustomerTable.InsertAsync (item); 
    } 
+0

這將需要一些自定義代碼,至少有一些推後將取代您的相關表中的佔位符id(客戶端只有列或您的實體有一個Azure Id列和您的普通實體ID列。支持關係和服務器擁有的Ifs(需要id突變)目前並不幸運地構建 – phillipv

回答

1

您提到的場景正是Azure移動應用程序爲ID使用字符串的原因。如果使用字符串,則可以爲該ID生成一個GUID並在同步之前使用該GUID。

獲取由數據庫生成的Id的唯一方法是同步該表。

+1

謝謝,我很擔心,並且自發布以來,我幾乎不顧Id的巨大重構來支持它。 MSDN網站上的「使用現有數據庫」場景。 – RichMercer