添加ViewModel类会将代码优先模型添加到数据库

时间:2014-03-09 22:12:41

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

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

视图模型:

    public class RolesViewModel 
    { 
        public int RolesViewModelId { get; set; }
        public string Role { get; set; } 
    }

有没有办法创建一个不会自动添加到DbContext类的视图模型,从而导致数据模型发生变化?

非常感谢,

杰森。

2 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:0)

在您的情况下,脚手架将在您的appContext类中添加以下代码

public DbSet<RolesViewModel> RolesViewModel { get; set; }

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