更新DB上下文以包含视图模型

时间:2015-04-24 14:12:57

标签: c# asp.net-mvc entity-framework

我正在使用实体框架和MVC4。我不确定如何将我的ViewModel添加到我的dbcontext。它就像在我的DbContext中声明一样简单吗?基本上我希望在我的控制器中使用我的视图模型并将其传递给我的视图。我试图完成这个问题遇到了很多问题。

namespace BagInventory.Models
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;

    public partial class FreshouseSalesEntities : DbContext
    {
        public FreshouseSalesEntities()
            : base("name=FreshouseSalesEntities")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

        public DbSet<Materials_Packer> Materials_Packer { get; set; }
        public DbSet<Materials_Product> Materials_Product { get; set; }
        public DbSet<Materials_PackerProduct> Materials_PackerProduct { get; set; }
        public DbSet<Materials_Vendor> Materials_Vendor { get; set; }
        public DbSet<Materials_Log> Materials_Log { get; set; }
        //Below is my view model I wish to add to dbcontext
        public DbSet<BigViewModel> BigViewModel{get;set;}


    }
}

这是正确的做法吗?

3 个答案:

答案 0 :(得分:4)

考虑ViewModel中的单词。查看它的一种超简化方式是ViewModel是一种在视图和模型之间来回转换数据的方法。但是,它不应该被用作您的域模型。

如果您的ViewModel和您的域名模型完全相同,那么您就不需要ViewModel。他们并不总是需要的。想想你的用例,然后适当选择。

答案 1 :(得分:2)

  

基本上我希望在我的控制器中使用我的视图模型并将其传递给我的视图。

您可以在控制器操作中执行此操作

var viewModel = new BigViewModel();
// assign values/objects/collections to your viewModel properties here
viewModel.Property1 = x;
viewModel.Property2 = y;
viewModel.Property3 = z;

return View(viewModel);

这就是你需要做的一切。

答案 2 :(得分:1)

1.上面的答案说明了从控制器传递数据所需要做的一切。但是你还需要在你的视图中说出

@model MvcTestApplication.Models.ViewModel

这样您就可以显示和获取显示的数据:

 @Html.EditorFor(model=>model.Materials_Packer.Materials_PackerName)

2.我假设您希望在此之后使用视图来更新数据库。视图中的所有内容都可用于发布数据。通过在POST方法中创建ViewModel对象作为参数,可以轻松实现这一点。另外一件事是,如果您在视图中缺少某些内容,例如某些ID,因为您不想显示它,那么您的Id将为空宾语。如果你的数据库支持NULL,那么Id是可以的,但如果没有,你需要在post方法中声明它。所以你需要的代码看起来像这样:

viewModel.Materials_Packer.Materials_PackerId = value++;
db.Table_Name.Add(viewModel.Materials_Packer);

如果model为Valid,这将在数据库中插入新行。

这就是它基本如何运作

您不需要在上下文中声明任何内容。此外,在查询数据库而不是真实对象时,必须使用viewModel.object。