使用DBContext选择字段

时间:2013-09-08 18:26:13

标签: asp.net-mvc entity-framework 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是我的连接字符串名称, 发票就是表格 路易威登是我的.edmx课程 - 我听说这可以在不使用Select语句的情况下实现。看来我没有将我的模型类链接到LinQ实体,但是当我添加我的上下文类时,它会在我的列表中抛出错误。我的列表{InvoiceModel}类中的“FieldName”列。

TLDR版本: 如何从DbContext类而不是整个表返回选定的字段 为什么添加DBContext类会在我的List(ModelClass)字段上引发错误

1 个答案:

答案 0 :(得分:2)

如果您不想要整张桌子,那么不要只在ToList()上拨打DbSet,因为这样就可以抓住您看到的所有桌子。你有它在使用Select时正确,因为Select语句用于创建从一组数据到新表单(新类,模型,匿名对象)的投影。