2013-03-17 2 views
0

Я использую структуру сущности, и я понял, что он не способен сериализовать вывод объектов EDM. Пока я использую таблицу Northwind Products. Поэтому я вынужден перебросить объект в другой и использовать .Cast, но он не работает. Единственное решение, которое у меня есть, это свойство по собственному усмотрению сделать это вручную в моем коде, но я думаю - должен быть лучший способ! Ради бога - это 2013! И это Entity кажется хорошей идеей в начале, но у нее так много ошибок и ограничений, что на самом деле это мешает больше, чем помогает, но в любом случае диаграммы EDMX хороши!Как создать объекты инфраструктуры Entity в веб-API?

Любой, у кого есть лучшее решение для литья предметов?

ПОКО

public class Product 
    { 
     public int ProductID { get; set; } 
     public string ProductName { get; set; } 
     //public Nullable<int> SupplierID { get; set; } 
     //public Nullable<int> CategoryID { get; set; } 
     public string QuantityPerUnit { get; set; } 
     public Nullable<decimal> UnitPrice { get; set; } 
     public Nullable<short> UnitsInStock { get; set; } 
     public Nullable<short> UnitsOnOrder { get; set; } 
     public Nullable<short> ReorderLevel { get; set; } 
     //public bool Discontinued { get; set; } 

     public Category Category { get; set; } 
     //public ICollection<Order_Detail> Order_Details { get; set; } 
     //public Supplier Supplier { get; set; } 




    } 

вид Модель

public class ProductsViewModel 
    { 

     public List<POCO.Product> Products { get; set; } 


     public ProductsViewModel() 
     { 
      using (NorthwindEntities dNorthwindEntities = new NorthwindEntities()) 
      { 
       this.Products = dNorthwindEntities.Products.Cast<POCO.Product>().ToList(); 

Web контроллер апи:

public class ProductsController : ApiController 
    { 



      public List<Product> GetAllProducts() 
      { 
       var viewmodel = new ProductsViewModel(); 
       return viewmodel.Products; 
      } 

ответ

1

1. Вы можете использовать фреймворки, такие как AutoMapper, для обработки Entities до ViewModel/DTO отображения автоматически.

2. Использование Entities в View (даже в их форме POCO) не рекомендуется нескольким причинам:

  • Security: Отправка объектов обратно клиенту/вид может выставить больше данных, чем вы предназначена.

  • Serialization: Так как ваши лица, как правило, содержат ссылки на других лицо, и эти объекты могут содержать обратную ссылку на (родитель) лицо, вы должны сконфигурировать сериализатор, чтобы справиться с этой ситуацией в противном случае вы получите Circular Dependency Exception.

  • Incompatibility: Структура вашего объекта может быть несовместима с тем, что должен сделать ваш view/client. Иногда вашему view просто нужен простой string, в то время как объект хранит эти данные очень сложным образом, поэтому view должен «извлечь» его, и вы получите view, полный ненужного кода детализации.
Смежные вопросы