0

Я разрабатываю приложение с использованием Azure и веб-API. Для этого я создал несколько таблиц Azure. Ниже приведен образец моей модели.Чтобы добавить/удалить ключ раздела и клавишу Row для использования таблиц Azure с WebAPI

public class Device : TableEntity 
{ 
    public Device(string partitionKey, string rowKey) 
    { 
     this.PartitionKey = partitionKey; 
     this.RowKey = rowKey; 
    } 

     public Device() { } 

     public string DeviceName { get; set; } 

     public string DeviceOS { get; set; } 

     public string Make { get; set; } 
} 

ограждающая Ключ формируются с использованием таблицей Имени как UD_Device (UD_ быть постоянным и устройством является именем таблицы. Ключ Row является просто ИмяУстройства уникальным для всех устройств.

Теперь, когда я запрашиваю эти таблицы в моем API-интерфейсе веб-интерфейса Я получаю список объектов вместе с ключом раздела и ключом Row в качестве свойств в них.

Этот список я должен отдать его внешнему угловому приложению как JSON, но ключ раздела и При этом не следует отправлять строковый ключ.

То же самое, когда я делаю запрос POST, то есть когда я получаю данные с углового front-end, и я должен отправить его в Azure Table, тогда пользователь не отправляет ключ раздела и клавишу Row. Итак, как я могу создать модель, которая удовлетворяет потребности обоих этих требований?

+0

Опишите пожалуйста вашу модель? Значения, хранящиеся в PartitionKey/RowKey, каким-то образом отражаются в модели (в некоторых других свойствах)? –

+0

Да, получив имя модели, я могу сделать ключ раздела, и одно из свойств действует как Row Key. У меня 14 таблиц Azure, и я использую одну и ту же концепцию во всех них. – zainul

+0

Для обновления объекта вам необходимо знать PartitionKey/RowKey. Поскольку вы упомянули, что вы можете получить эти значения из своей модели, я предлагаю вам сделать это, а не создавать дополнительные свойства в вашей модели для этих двух. –

ответ

-1

Что вы ищете, это объект передачи данных.

  1. Вы делаете класс, представляющий модель вы хотите выставить своим клиентам
  2. Перед отправкой клиенту, превратить ваш объект данных для этого нового DTO класса
  3. Когда клиент отправляет один из эти DTO, преобразуйте его в свой объект данных и отправьте его в хранилище или получите из хранилища или замените его новыми данными.

Библиотека, такая как AutoMapper, может облегчить этот процесс.

+0

Можно ли это сделать, используя одну модель для одной таблицы, так как у меня 14 таблиц. – zainul

+0

При таком подходе вам нужно будет сделать DTO для каждого типа таблицы. Если кто-то придумает лучший подход, который предполагает меньшее повторение, тогда вы должны пойти с этим :) – juunas

+0

ok .. спасибо, но мне нужен подход, где я могу сделать это только одной моделью – zainul

0

Этот список, который я должен предоставить его внешнему угловому приложению как JSON, но при этом не следует отправлять ключ раздела и строки строки.

В моем примере я могу получить все свойства сущности (включая ключ раздела и ключ строки), вызывая веб-API из клиентского приложения AngularJS. Следующий образец кода для вашей справки.

Web API

public class studentEntity : TableEntity 
{ 
    public studentEntity(string lastName, string firstName) 
    { 
     this.PartitionKey = lastName; 
     this.RowKey = firstName; 
    } 

    public studentEntity() { } 

    public int Age { get; set; } 

} 

public List<studentEntity> Get() 
{ 
    CloudStorageAccount storageAccount = CloudStorageAccount.Parse(
CloudConfigurationManager.GetSetting("StorageConnectionString")); 
CloudTableClient tableClient = storageAccount.CreateCloudTableClient(); 


    CloudTable table = tableClient.GetTableReference("student"); 

    TableQuery<studentEntity> rangeQuery = new TableQuery<studentEntity>().Where(
     TableQuery.GenerateFilterCondition("PartitionKey", QueryComparisons.Equal, "Harp")); 

    List<studentEntity> list = table.ExecuteQuery(rangeQuery).ToList(); 
    return list; 
} 

AngularJS

app.controller('myCtrl', function ($scope, $http) { 
    $http.get("http://XXX/api/values") 
    .then(function (response) { 
     $scope.mydata = response.data; 
    }); 
}); 

enter image description here

Если мой пример кода не может помочь вам найти проблему с вашим образцом, вы могли бы поделиться с нами вашим код веб-API (получение сущностей и списка возвращаемых сущностей) и Ang ularJS (отправка запроса в Web API). И тогда мы воспроизведем проблему на основе вашего кода.

+0

Я понимаю, что вы используете имя и фамилию как свой ключ раздела и ключ строки, но поскольку я дал свой код модели выше, я делаю ключ раздела с использованием моего имени модели, поэтому он не является свойством в моей модели, и поэтому я не Не хотите, чтобы пользователь это видел или я не хочу посылать его на угловую часть, как вы делаете – zainul