Проблема с моделью данных надежного обслуживания - PullRequest
0 голосов
/ 02 мая 2020

Я новичок в Azure Service Fabri c и наблюдал курс Ивана Гаврилюка "Понимание моделей программирования Azure Service Fabri c" на Pluralsight. Я следил за этим, и базовая модель данных c в надежном сервисе и API работает, как объяснено в курсе.

Однако, если я увеличиваю сложность используемой модели данных, я сталкиваюсь с ошибкой.

Product.cs из ECommerce.ProductCatelog.Model

namespace ECommerce.ProductCatalog.Model
{
   public class Product
   {
      public Guid Id { get; set; }

      public string Name { get; set; }

      public string Description { get; set; }

      public double Price { get; set; }

      public int Availability { get; set; }
      public Supplier Suppliers { get; set; }
   }

   public class Supplier
   {
      public Guid Id { get; set; }
      public string Name { get; set; }

   }
}

ApiProduct.cs из ECommerce.API.Model

   public class ApiProduct
   {
      [JsonProperty("id")]
      public Guid Id { get; set; }

      [JsonProperty("name")]
      public string Name { get; set; }

      [JsonProperty("description")]
      public string Description { get; set; }

      [JsonProperty("price")]
      public double Price { get; set; }

      [JsonProperty("isAvailable")]
      public bool IsAvailable { get; set; }

      [JsonProperty("suppliers")]
      public ApiSupplier suppliers { get; set; }

   }

   public class ApiSupplier
   {
      [JsonProperty("id")]
      public Guid Id { get; set; }

      [JsonProperty("name")]
      public string Name { get; set; }

   }

ProductController.cs из Ecommerce.API .Controlers

[HttpGet]
      public async Task<IEnumerable<ApiProduct>> GetAsync()
      {
         IEnumerable<Product> allProducts = await _service.GetAllProductsAsync();

         return allProducts.Select(p => new ApiProduct
         {
            Id = p.Id,
            Name = p.Name,
            Description = p.Description,
            Price = p.Price,
            IsAvailable = p.Availability > 0,
            suppliers = p.Suppliers
         });
      }

Последняя строка в вышеприведенном блоке вызывает ошибку целочисленности: "Невозможно неявно преобразовать тип 'ECommerce.ProductCatelog.Model.Supplier' в 'ECommerce.API.Model.Supplier'"

Любые предложения о том, как обойти это приветствие:)

Приветствия, Адам

1 Ответ

0 голосов
/ 02 мая 2020

Ваша проблема не указана c для обслуживания Fabri c, а C# в целом. Вы пытаетесь установить переменную со значением другого типа.

В этой строке:

IEnumerable<Product> allProducts = await _service.GetAllProductsAsync();

Вы получаете коллекцию элементов типа ECommerce.ProductCatalog.Model.Product. В этом классе вы добавили свойство Suppliers (которое должно быть Supplier, поскольку оно не является коллекцией) типа ECommerce.ProductCatalog.Model.Supplier.

Теперь со следующей строкой:

     return allProducts.Select(p => new ApiProduct
     {
        Id = p.Id,
        Name = p.Name,
        Description = p.Description,
        Price = p.Price,
        IsAvailable = p.Availability > 0,
        suppliers = p.Suppliers
     });

вы преобразуете эту коллекцию в коллекцию нового типа ECommerce.API.Model.Product, к которой вы добавили новое свойство Suppliers типа ECommerce.API.Model.Supplier, но вы установили для этого свойства исходное значение без его преобразования. Итак, преобразуйте исходное свойство Suppliers в правильный тип:

     return allProducts.Select(p => new ApiProduct
     {
        Id = p.Id,
        Name = p.Name,
        Description = p.Description,
        Price = p.Price,
        IsAvailable = p.Availability > 0,
        suppliers = new ApiSupplier
        {
           Id = p.Suppliers.Id,
           Name = p.Suppliers.Name
        }    
     });

Обновление: сделайте коллекцию Suppliers

Сделайте вашу собственность Suppliers коллекцией как в вашей модели данных, так и в вашей модели Api:

 public Collection<ApiSupplier> suppliers { get; set; }

Затем преобразуйте коллекцию соответственно:

     return allProducts.Select(p => new ApiProduct
     {
        Id = p.Id,
        Name = p.Name,
        Description = p.Description,
        Price = p.Price,
        IsAvailable = p.Availability > 0,
        suppliers = p.Suppliers.Select(s => new ApiSupplier
           {
             Id = s.Id,
             Name = s.Name
           }    
     });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...