更新数据库上下文以包含视图模型

Updating DB context to include a view model

我正在使用 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;}


    }
}

这是正确的做法吗?

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

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

Basically I wish to use my view model in my controller and pass it to my view.

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

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);

这就是您需要做的。

1.The 上面的回答说明了从控制器传递数据所需要做的一切。但是你还需要在你的观点中说例如

@model MvcTestApplication.Models.ViewModel

所以你可以像这样显示和获取显示的数据:

 @Html.EditorFor(model=>model.Materials_Packer.Materials_PackerName)
例如,

2.I 假设您希望在此之后使用视图更新数据库。视图中的所有内容都可用于 posting 数据。通过在 POST method.And 中创建一个 ViewModel 对象作为参数,这很容易发生。另一件事是,如果您在视图中丢失了某些东西,例如一些 ID,因为您不想显示它,那Id 在您的对象中将为 null。如果您的数据库支持该 Id 的 NULL 是可以的,但如果不支持,则需要在 post 方法中声明它。所以你需要的代码看起来像这样:

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

如果模型有效,这将在数据库中插入新行。

这就是它的基本工作原理

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