EF + SQL Server:代码优先或数据库优先

时间:2012-08-02 09:46:47

标签: asp.net-mvc asp.net-mvc-3 sql-server-2008 entity-framework entity-framework-5

我有一个用ASP.Net 2.0 Web Form编写的系统。与MySQL服务器通信的框架非常酷。它读取服务器表单标签或面板内的所有控件,并在目标表上执行CRUD操作。

当我创建CRUD页面时,我只需要在数据库用户{id,name,password,createdate}中创建表,我只需要使用id作为表中的确切列名。控件可以是输入/选择/选项/ chekbox / textarea,甚至是页面上的FCK编辑器或CK编辑器。框架循环遍历Panel中的所有控件并保存/编辑/删除。如果我想添加一些新字段,电子邮件和移动设备,我只需要在页面上添加两个控件并在表格中添加两个列。而已。我不必更改page.aspx.cs文件,实体层,业务层或数据访问层中的任何内容。它非常容易实现和维护。

我们希望升级系统以使用带有Entity Framework CT5的ASP.Net 4 MVC3。我们将从头开始重建整个系统。我希望这里的一些专家可以给我一些指示。我找到了以下两个重建系统的选项。

1。代码优先 我们的新系统将执行与上述框架完全相同的操作。它将遍历所有Request.Forms数据并将其与数据库中的关联表映射,并保存/更新/删除所有数据。为此,视图将发布表单数据,控制器将接受具有Entity类的值并通过EF将它们保存到数据库。我仍然需要创建ViewModel类来在View上显示数据。如果有任何更改,如向用户页面添加电子邮件和移动字段,我仍然需要更改三个地方视图,实体(域类)和ViewModel。我不必更改数据库中的任何内容,因为EF将自动运行ALTER TABLE以添加两个新字段。我仍然无法弄清楚如何最小化实体和视图模型类的需求。

2。数据库优先 我真的不喜欢这种方式,但如果这个解决方案提供更灵活的操作,我会的。我将在数据库中创建列,系统将动态创建ViewModel(我仍然在弄清楚如何做到这一点)读取表中的所有列,并在页面上显示数据。当视图发布数据时,它需要动态创建实体类并将更改保存到数据库中。

编辑: 升级当前系统的原因。

  • 我们希望利用.Net 4,Linq,Entity Framework中的新功能,不引人注目的javascript库,使用JSON数据的easifer,远程验证(我们可以在当前系统中使用RequireFieldValidator,RegExValidator但它们是有限的,例如:输入复选框和选项上的验证),使用var和interface键入鸭子。

1 个答案:

答案 0 :(得分:0)

  

我们的新系统将执行与上述操作完全相同的操作   框架。它将遍历所有Request.Forms数据并映射它们   在数据库中使用其关联表并保存/更新/删除所有   数据。为此,视图将发布表单数据,控制器将   接受带有Entity类的值并将它们保存到   数据库通过EF。

如果我在这里遗漏了某些东西,有人请打我,但这些陈述似乎与我相矛盾。如果您想要一个能够自动解析Request.Forms数据并将它们直接映射到数据库表的系统,那么为什么还需要使用Entity Framework(或任何其他类型的中间件)呢? EF或任何ORM的要点是创建一个有意义的概念数据对象集合,代表系统的名词。然后,您对这些名词进行操作,影响其属性或访问其行为,并让ORM弄清楚如何将它们映射到表+列。

要回答您的问题,听起来您想要最简单的解决方案,这意味着您必须编写最少量的代码。如果这是一个正确的假设,那么您可能希望首先使用数据库。你可以让EF生成你的实体类,但是就像你说的那样,你仍然需要手动创建viewmodel类或者想出某种AOP(可能使用T4)来为你生成这些类。但是,只要你给工具赋予了为你生成某种东西的能力,你就会失去对它的控制权。

我首先选择代码优先/ 概念模型,但我也希望完全控制应用程序中的所有内容(除了可以委托给AutoMapper,EF等工具和框架的基础架构问题) T4MVC等)。是的,这是更多的工作,因为我必须创建实体类,viewmodel类和视图,(和控制器,动作过滤器,和html帮助器,以及其他rrrvrything)。如果您的域名是一个可以直接将文本框映射到数据库表格的域名。列,那么也许这对你来说太过分了。