Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 添加ViewModel类会将codefirst模型添加到数据库中_C#_Asp.net Mvc_Entity Framework_Asp.net Mvc 5_Entity Framework 6 - Fatal编程技术网

C# 添加ViewModel类会将codefirst模型添加到数据库中

C# 添加ViewModel类会将codefirst模型添加到数据库中,c#,asp.net-mvc,entity-framework,asp.net-mvc-5,entity-framework-6,C#,Asp.net Mvc,Entity Framework,Asp.net Mvc 5,Entity Framework 6,在我的ASP.NET MVC 5项目中,我需要一个视图模型,但当我将一个视图模型添加到models文件夹中时,一个新实体被添加到数据库中,我被迫添加迁移并更新数据库。我不希望发生这种情况,因为我正在添加的是一个视图模型,而不是需要持久化回数据库的模型。我想构建一些控制器和视图,因此我向类添加了一个主键。我没有将新创建的视图模型添加到我的DbContext类中 视图模型: public class RolesViewModel { public int Role

在我的ASP.NET MVC 5项目中,我需要一个视图模型,但当我将一个视图模型添加到models文件夹中时,一个新实体被添加到数据库中,我被迫添加迁移并更新数据库。我不希望发生这种情况,因为我正在添加的是一个视图模型,而不是需要持久化回数据库的模型。我想构建一些控制器和视图,因此我向类添加了一个主键。我没有将新创建的视图模型添加到我的
DbContext
类中

视图模型:

    public class RolesViewModel 
    { 
        public int RolesViewModelId { get; set; }
        public string Role { get; set; } 
    }
是否有一种方法可以创建一个不会自动添加到
DbContext
类的视图模型,从而导致数据模型发生更改

非常感谢,


Jason.

不管你称它为视图模型、实体等等,它只是语义。一切都只是一个类,它所使用的上下文决定了您将它称为什么。对于实体,这是在
DbContext
中显式或隐式地添加引用,这是将某些内容添加到数据库中的唯一方法。我强调了“或隐式”部分,因为如果在
DbContext
中引用的任何类,或连接到此处引用的任何类的任何类,也会引用“视图模型”,它将最终出现在您的数据库中。实体框架将自动遵循您的类层次结构并为所有关系创建表,即使您没有在
DbContext

中直接引用这些层次结构中的特定类,在您的情况下,Scaffolding将在appContext类中添加以下代码

public DbSet RolesViewModel{get;set;}


如果愿意,您仍然可以使用scaffolding,但是请记住删除该条目,代码不会首先创建任何表。它将保持你的数据库干净

真奇怪。您是否真的在上下文中添加了DbSet?他写道:“我没有将新创建的视图模型添加到我的DbContext类中。”。但是我同意这很奇怪。公共类RolesViewModel{public int RolesViewModelId{get;set;}公共字符串Role{get;set;}}您确定没有任何预构建工具在DbContext文件中进行更改吗?自动更改DbContext是不寻常的行为。Daniel Grankin,我也读过,但我们需要确保。杰森,请给我们尽可能多的信息。DbContext,已安装的第三方软件包。你能想到的一切都可能导致这个问题。您发布的ViewModel看起来不错,但它没有给我们提供足够的信息。Chris,如果它只是一个ViewModel,需要从一个或多个模型中获取一些信息以使视图更易于使用,那么如何阻止它添加到DbContext中?我创建了一个UsersViewModel,它只是一个包含所有用户名(来自Identity)的列表,我还包括一个Id属性。它也在我的DbContext中创建了这个。我删除了它和Id字段(以及视图列表中的Id引用),它的行为似乎符合我的要求。这样做似乎违反直觉。有什么想法或建议吗?听起来好像你以某种方式构建了这个类,因为如果你只是添加一个类,Visual Studio通常不会为你将它添加到
DbContext
中,给它一个
Id
属性,等等。因此,如果是这样的话,我建议不要使用脚手架,而是从头开始创建一个新类。现在,当您基于视图模型构建控制器和视图时,脚手架假定您正在为其提供一个实体,因此它将创建所有视图,例如它正在处理一个实体。同样,最好的解决方案是在这些场景中不使用脚手架。