簡體   English   中英

為什么Azure移動應用程序的數據模型中有字符串ID?

[英]Why is there a string ID in the data model of Azure Mobile Apps?

我正在Azure移動應用中使用C#嘗試學習它們。 我創建了模型以鏈接到我的Azure SQL DB,並創建了一個DataObject,如下所示:

public class Account : EntityData
{
    //public int id { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string PhoneNumber { get; set; }
    public string Password { get; set; }
    public DateTime dtCreated { get; set; }
    public Guid oGuid { get; set; }

}

注意,我在上面注釋掉了公共int id。 這給了我查詢重復的列錯誤。

最后,我使用新創建的Account DataObject創建了一個控制器。

因此,我運行了該應用程序並單擊了“表/帳戶”功能,它返回了零行(但是有數據,我可以向在Azure移動應用程序中使用的用戶查詢它)。

然后,我注意到模型模式是這樣的:

[
  {
    "id": 0,
    "FirstName": "string",
    "LastName": "string",
    "PhoneNumber": "string",
    "Password": "string",
    "dtCreated": "2016-07-06T17:45:47.114Z",
    "oGuid": "string",
    "Id": "string",
    "Version": "string",
    "CreatedAt": "2016-07-06T17:45:47.114Z",
    "UpdatedAt": "2016-07-06T17:45:47.114Z",
    "Deleted": true
  }
]

配置的模型有幾個問題(而且我不知道某些列的來源...)

首先,該ID被列出兩次,一次是int(必須是我的),另一次是字符串,我不知道它從何而來。

同樣,在數據庫中,oGuid的類型為uniqueIdentifier; 不是字符串。 這可能是問題,也可能不是問題,因為我還無法測試。

然后還有我的數據庫中不存在的其他列,包括CreatedAt(日期時間),UpdatedAt(日期時間),Version(字符串)和Deleted(位)。

我在想為什么沒有從該調用返回任何數據的問題/原因是數據不匹配。

我是否需要添加api測試中模型中列出的其他列?

我還測試過嘗試調用/ table / Account / 3來加載特定帳戶,並且它不返回任何行...我猜這是模型不匹配,但是我不確定這是問題還是其他原因它? 我沒有看到任何錯誤或警告。


更新資料

我了解了模型優先和Azure的情況,以及如何將Azure中的現有數據庫附加到新代碼。 我將其發布在這里,希望它可以節省其他人的時間。 這確實應該更容易做到。 我還不喜歡使用代碼優先(還),因為我想手動控制數據庫...因此這使我使用數據庫后端變得容易得多。

首先,我創建了一個新項目(Azure Mobile App),然后在模型下,我右鍵單擊該模型並添加->新實體數據模型,然后添加了azure db名稱,密碼,並為其指定了“用戶創建的配置文件名稱”,如下所示。 如下所示,必須在web.config中編輯此連接。

然后,我不得不在DataObjects中創建表的模型(沒有MS必需的列),並根據dataobject創建一個控制器。 然后,我不得不編輯web.config並設置一個非實體數據庫連接字符串:例如:

<add name="[user created preset name]" providerName="System.Data.SqlClient" connectionString="Server=[Azuredb server connection];initial catalog=[DBName];persist security info=True;user id=[user];password=[pass];MultipleActiveResultSets=True"/>

最后,在MobileServiceContext中,我必須將DataObject模型映射到Azure sql中的表,並設置要使用的連接字符串,從默認的MS_TableConnectionString到web.config中的連接字符串。

    private const string connectionStringName = "Name=[user created preset name]";

在OnModelCreating()下,我添加了:

    modelBuilder.Entity<Account>().ToTable("tblAccount");

其中Account是我在DataObjects中創建的模型(類),而tblAccount是AzureDB中的表名。

EntityData抽象類包含其他字段-移動脫機同步有五個字段

  • ID(字符串-通常為GUID-必須是全局唯一的)
  • UpdatedAt(DateTimeOffset-通過數據庫觸發器自動維護-用於增量同步)
  • CreateAt(DateTimeOffset-用作進入數據庫分區以優化讀取的鍵,但未使用)
  • 版本(一個字節[]-時間戳記-用於樂觀並發/沖突解決)
  • 刪除(布爾值-用於在刪除記錄時更新其他客戶端-稱為軟刪除)。

您的客戶端需要其客戶端模型中的所有這些字段,但“已刪除”(除非請求,否則不會傳輸,並且會通過Mobile Apps SDK自動處理以清除已刪除記錄的脫機同步)。

您還沒有說后端或前端使用什么語言。 但是,在兩種情況下都可以使用日志記錄-您只需將其打開,捕獲異常等即可。為您提供一些參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM