Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.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
Asp.net mvc 3 在实体框架中使用数据库优先的方法_Asp.net Mvc 3_Entity Framework_C# 4.0_Orm_Asp.net Mvc 4 - Fatal编程技术网

Asp.net mvc 3 在实体框架中使用数据库优先的方法

Asp.net mvc 3 在实体框架中使用数据库优先的方法,asp.net-mvc-3,entity-framework,c#-4.0,orm,asp.net-mvc-4,Asp.net Mvc 3,Entity Framework,C# 4.0,Orm,Asp.net Mvc 4,我对MVC和EF都是新手。在我们的应用程序中,我们使用数据库优先的方法。当我们使用DB-first方法时,我们从DB生成edmx 当我生成edmx时,它会为数据库中的表生成所有相关的类。在这里,我很困惑是直接在视图中使用生成的类,还是应该在EF生成的类的基础上再创建一层类,然后从控制器和视图中使用它们 如果我要在实体上再创建一层类,我必须处理这些类之间的映射。如果模型有任何变化,我怀疑这可能是未来的痛苦 如果我直接使用控制器中的实体,我会觉得我正在将所有不必要的东西暴露给控制器和视图 有人能告诉

我对MVC和EF都是新手。在我们的应用程序中,我们使用数据库优先的方法。当我们使用DB-first方法时,我们从DB生成edmx

当我生成edmx时,它会为数据库中的表生成所有相关的类。在这里,我很困惑是直接在视图中使用生成的类,还是应该在EF生成的类的基础上再创建一层类,然后从控制器和视图中使用它们

如果我要在实体上再创建一层类,我必须处理这些类之间的映射。如果模型有任何变化,我怀疑这可能是未来的痛苦

如果我直接使用控制器中的实体,我会觉得我正在将所有不必要的东西暴露给控制器和视图


有人能告诉我如何继续吗?

您可能想使用NuGet安装一个POCO(普通的旧C#对象-不依赖于其他功能(如EF)的对象)生成器,这样您就可以将对象传递到视图层,而不需要查看层了解EF

这被称为“关注点分离”或“单一责任原则”——您的视图知道如何显示数据,您的DAL知道如何检索和存储数据,并且两者都不必知道有关执行其他工作的细节

如果您将EF对象传递到链的上游,那么您还需要将EF知识和能力传递到链的上游-传递POCO会绕过这一点

请看一下这个SO主题:


你做得很好,就凭你拥有的方式,你不需要改变它。您应该能够使用生成的类,或者如果您认为您公开的内容太多,您可以创建一个视图模型,只填充您关心的数据,并将其传递给视图。这就是MVC的工作原理

假设您有一个名为
Articles
的数据库表,其中有很多内容您不想传递给视图,您可以创建这样的视图模型

public class ArticlesViewModel
{
    [Required] // this is optional, just to give you an idea of validation
    public string Title { get; set; }
    public DataTime Date { get; set; }
}
现在,在控制器中,您将有如下内容:

ArticlesViewModel articleVM = new ArticlesViewModel();
// populate it from your DB

return View(articleVM);
因此,现在您的视图只有
标题
日期
,(您还应该有
ID
,这样您就可以轻松地从数据库中检索完整的
文章


这将使您了解如何从数据库中获取所需信息。

据我所知,在代码优先的方法中,我们使用POCO。如果我错了,请纠正我。通过安装POCO生成器,您可以在Database First项目中使用POCO-我有几个主要的项目是这样做的。EF4.x DBContext generator与POCO generator类似吗?因此,除了Articles类外,您还有ArticlesViewModel类,并且您将模型类公开给视图。在第一步检索数据时,您将获得文章,并从文章中检索ArticlesViewModel。如果我错了,请更正。是的,请查看默认MVC3应用程序中的
AccountModels.cs
。这些仅公开用户可以看到和更改的信息。然后在一篇文章中,它更新了
成员资格表。会员资格包含的属性远不止用户名、密码等。希望对您有所帮助。看见