Почему в модели данных Azure Mobile Apps есть идентификатор строки?

Я работаю над С# в Azure Mobile Apps, пытаясь их изучить. Я создал модель для связи с моей 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; это давало мне повторяющуюся ошибку столбца в запросе.

Наконец, я создал контроллер, используя недавно созданный объект DataObject.

Итак, я запустил приложение и нажал на функцию "tables/Account", и он вернул нулевые строки (но есть данные, и я могу запросить его с пользователем, который я использую в мобильном приложении 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
  }
]

Есть пара проблем, которые я вижу с настроенной моделью (и я не знаю, откуда происходят некоторые из столбцов...)

Во-первых, идентификатор указан дважды, один раз как int (который должен быть моим) и другой id как строка, и я понятия не имею, откуда это взялось.

Кроме того, в БД oGuid имеет тип uniqueIdentifier; не строка. Это может быть или не быть проблемой, потому что я еще не могу проверить.

Затем есть другие столбцы, которые просто не существуют в моем БД, включая CreatedAt (datetime), UpdAt (datetime), Version (string) и Deleted (бит).

Я думаю, что проблема/причина, по которой я не получаю никаких данных от этого вызова, заключается в несоответствии данных.

Нужно ли добавлять другие столбцы, указанные в модели в тесте api?

Я также тестировал попытку вызвать /table/Account/ 3 для загрузки определенной учетной записи, и она не возвращает строк... Я предполагаю, что это несоответствие модели, но я не уверен, что эта проблема или что-то еще вызывает это? Я не вижу никаких ошибок или предупреждений.


Обновление

Я выяснил, что происходит с первой моделью и Azure и как подключить существующую БД в Azure к новому коду. Я собираюсь опубликовать это здесь, чтобы надеяться, что это спасет другое время. Это действительно должно было быть проще сделать. Я не поклонник codefirst (пока), поскольку мне нравится управлять БД вручную... Поэтому мне намного легче работать с бэкэндом db.

Сначала я создал новый проект (Azure Mobile App), затем по моделям я щелкнул правой кнопкой мыши модель и добавила новую модель данных сущности, а затем добавила в имя azure db, пароль и присвоила ей мое "имя, созданное пользователем", как используемый ниже. Это соединение необходимо отредактировать в файле web.config, как показано ниже.

Затем мне пришлось создать модель для таблицы в DataObjects (без требуемых MS столбцов) и создать контроллер из объекта данных. Затем мне пришлось отредактировать файл web.config и установить строку соединения с не-сущностью DB: например:

<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.

Ответ 1

Абсолютный класс EntityData содержит дополнительные поля - имеется пять полей для мобильной автономной синхронизации

  • Id (строка - обычно GUID - должна быть глобально уникальной)
  • UpdAt (DateTimeOffset - поддерживается автоматически через триггер базы данных - используется для инкрементной синхронизации)
  • CreateAt (DateTimeOffset - используется как ключ в разделе базы данных для оптимизации чтения, но не используется в противном случае)
  • Версия (байт [] - временная метка - используется для оптимистического concurrency/разрешения конфликтов)
  • Удалено (логическое значение - используется для обновления других клиентов при удалении записи - это называется "мягкое удаление" ).

Вашему клиенту нужны все эти поля в своей модели клиента, за исключением Deleted (который не передается, если только не запрашивается, и автоматически обрабатывается через SDK Mobile Apps для очистки автономной синхронизации удаленных записей).

Вы не указали, какие языки используются на бэкэнд или интерфейсе. Тем не менее, регистрация доступна в обоих случаях - вам просто нужно включить ее, захватить исключения и т.д. Некоторые ссылки для вас: