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

C# 更新数据库上下文以包含视图模型,c#,asp.net-mvc,entity-framework,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 par

我正在使用实体框架和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;}


    }
}
inventory.Models
{
使用制度;
使用System.Data.Entity;
使用System.Data.Entity.Infrastructure;
公共部分类实体:DbContext
{
公共实体()
:base(“name=FreshouseSalesEntities”)
{
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
抛出新代码FirstException();
}
公共数据库集材料\u包装器{get;set;}
公共DbSet Materials_乘积{get;set;}
公共DbSet Materials_PackerProduct{get;set;}
公共数据库集材质\u供应商{get;set;}
公共DbSet Materials_Log{get;set;}
//下面是我希望添加到dbcontext的视图模型
公共DbSet BigViewModel{get;set;}
}
}

这是正确的方法吗?

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


如果您的
ViewModel
和域模型完全相同,则不需要
ViewModel
。它们并不总是需要的。思考您的用例,然后进行适当的选择。

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

如果您的
ViewModel
和域模型完全相同,则不需要
ViewModel
。它们并不总是需要的。考虑您的用例,然后进行适当的选择

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

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

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);
这就是你所需要做的

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

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

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.上面的答案说明了从控制器传递数据所需做的一切。但你也需要以你的观点为例

@model MvcTestApplication.Models.ViewModel
因此,您可以按如下方式显示和获取显示的数据:

 @Html.EditorFor(model=>model.Materials_Packer.Materials_PackerName)
viewModel.Materials_Packer.Materials_PackerId = value++;
db.Table_Name.Add(viewModel.Materials_Packer);
2.例如,我假设您希望在此之后使用视图更新数据库。视图中的所有内容都可用于发布数据。通过在POST方法中创建一个ViewModel对象作为参数,这很容易实现。另一件事是,如果您的视图中缺少某些内容,例如某个ID,因为您不想显示它,那么该ID在您的对象中将为空。如果您的数据库支持该Id的NULL,则可以,但如果不支持,则需要在post方法中声明它。因此,您需要的代码将如下所示:

 @Html.EditorFor(model=>model.Materials_Packer.Materials_PackerName)
viewModel.Materials_Packer.Materials_PackerId = value++;
db.Table_Name.Add(viewModel.Materials_Packer);
若模型有效,这将在数据库中插入新行

这就是它的基本工作原理


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

1.上面的答案说明了从控制器传递数据所需的所有操作。但你也需要以你的观点为例

@model MvcTestApplication.Models.ViewModel
因此,您可以按如下方式显示和获取显示的数据:

 @Html.EditorFor(model=>model.Materials_Packer.Materials_PackerName)
viewModel.Materials_Packer.Materials_PackerId = value++;
db.Table_Name.Add(viewModel.Materials_Packer);
2.例如,我假设您希望在此之后使用视图更新数据库。视图中的所有内容都可用于发布数据。通过在POST方法中创建一个ViewModel对象作为参数,这很容易实现。另一件事是,如果您的视图中缺少某些内容,例如某个ID,因为您不想显示它,那么该ID在您的对象中将为空。如果您的数据库支持该Id的NULL,则可以,但如果不支持,则需要在post方法中声明它。因此,您需要的代码将如下所示:

 @Html.EditorFor(model=>model.Materials_Packer.Materials_PackerName)
viewModel.Materials_Packer.Materials_PackerId = value++;
db.Table_Name.Add(viewModel.Materials_Packer);
若模型有效,这将在数据库中插入新行

这就是它的基本工作原理


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

为什么要将视图模型添加到数据上下文中?通常,视图模型是视图的模型,与数据库分离。您将创建一些代码,以便在视图模型和数据库模型之间迁移值。您的视图模型代表什么?不。。。DbContext不应该了解ViewModel。您通常会从DbContext中选择实体,然后将它们映射到控制器中的VewModel。谢谢,我感觉我处理问题的方式不对。为什么要将视图模型添加到数据上下文中?通常,视图模型是视图的模型,与数据库分离。您将创建一些代码,以便在视图模型和数据库模型之间迁移值。您的视图模型代表什么?不。。。DbContext不应该了解ViewModel。您通常会从DbContext中选择实体,然后将它们映射到控制器中的VewModel。谢谢,我感觉我处理问题的方式不对。我想补充一点,在这种情况下,控制器应该将实体对象转换为ViewModel。感谢您的输入。我对C和MVC非常陌生。感谢您的帮助。我想补充一点,在这种情况下,控制器应该将实体对象转换为ViewModel。感谢您的输入。我对C和MVC非常陌生。我感谢你的帮助。