Я работаю над С# в 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.