2013-09-08 6 views
0

У меня есть пара вопросов относительно DBContext и достижения моих желаемых результатов. я могу получить данные, как этотИспользование DBContext для выбора полей

---Model 
    public class InvoiceModel 
{ 
    [Key] 
    public int? Invoice_Number { get; set; } 
    public decimal Amt_Total { get; set; } 
    public decimal Amt_Due { get; set; } 
    public decimal Amt_Paid { get; set; } 

    public List<InvoiceModel> GetInvoice() 
    { 
     using (VuittonEntities db = new VuittonEntities()) 
     { 
      return (from inv in db.Invoice 
        select new InvoiceModel 
        { 
         Invoice_Number = inv.Invoice_, 
         Amt_Total = inv.AmountTotal, 
         Amt_Due = inv.AmountDue, 
         Amt_Paid = inv.AmountPaid 
        }).ToList(); 
     } 
    } 

--- Controller 
public ViewResult Index() 
    { 
     var data = new InvoiceModel().GetInvoice(); 
     return View(data); 
    } 

Это в значительной степени стандарт LinQ и возвращает свою таблицу Invoice с 4 полями я выбрал. Но теперь я хочу достичь этого, используя DB Context. Поэтому я добавил этот новый класс к моему контроллеру и назвал его в представлении следующим образом.

Controller 
public class VuittonEntities : DbContext 
    { 
     public DbSet<InvoiceModel> Invoice { get; set; } 
    } 
View 
    public ViewResult Index() 
    { 
      VuittonEntities db = new VuittonEntities();  
      return View(db.Invoice.ToList()); 
    } 

Он возвращает всю таблицу, и я должен прокомментировать мой List'InvoiceModel»класса

Предположения: VuittonEntities через соединение String Name, счет-фактура является таблица Vuitton мой класс EDMX- - Я слышал, что это может быть достигнуто без использования инструкции Select. Похоже, что я не привязываю свой класс модели к объекту LinQ, но когда я добавляю свой класс контекста, он выдает ошибки в столбцах invIn. "FieldName" в моем классе List {InvoiceModel}.

TLDR Версия: Как я могу вернуть выбранные поля из DbContext класса вместо всей таблицы Почему добавление класса DbContext вызывать ошибки в моем списке (ModelClass) полей

ответ

2

Если вы не хотите всю таблицу , то не просто вызывайте ToList() на DbSet, так как это просто возьмет всю таблицу, как вы видели. У вас было это правильно при использовании Select, так как оператор Select предназначен для создания проекции из одного набора данных в новую форму (новый класс, модель, анонимный объект).

+0

Хорошо, мне сказали, что выбор не нужен, но есть другой способ, любая идея по этому поводу? Кроме того, можете ли вы пролить свет на причину ошибок класса List, когда я добавляю класс DbContext? – CSharper

+1

Единственный способ, которым я мог думать о том, что он работает без 'Select' с моей головы, с помощью представления SQL и отображения представления в вашем DbContext ... Я бы, вероятно, в конечном итоге придерживался Select, хотя .. Кроме того, если вы хотите помочь с ошибкой, вы должны сказать, что это за ошибка! Наконец, я бы серьезно подумал о том, чтобы отделить часть вашей логики, например, метод GetInvoice INSIDE класса InvoiceModel, который действительно должен быть в другом месте, например, на уровне сервиса или в репозитории. Наконец, ваш ключ не должен быть нулевым для вашего объекта, хранящегося в базе данных. – tostringtheory

+0

ваше право Я не должен иметь этот столбец с нулевым значением, у меня есть поле идентификатора, которое я буду использовать вместо этого. Мое поле inv. Указывает на мой сущность, но когда я вхожу в поле контекста DB, вместо этого он указывает на мой класс модели. Я планировал переместить его в слой данных, я хотел, чтобы это работало, прежде чем я добавил еще один шаг, я сейчас попробую, и посмотрю, что произойдет. – CSharper