0

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

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

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

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

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

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

  • 我们想利用 .Net 4、Linq、Entity Framework、不显眼的 javascript 库、更容易处理 JSON 数据、远程验证(我们可以在当前系统中使用 RequireFieldValidator、RegExValidator 但它们是有限的,例如:验证输入复选框和选项),使用 var 和接口进行鸭式输入。
4

1 回答 1

0

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

Someone please slap me if I'm missing something here, but these statements seem contradictory to me. If you want a system that will automatically parse the Request.Forms data and map them directly to a database table, then why would you need to use Entity Framework (or any other kind of middleware) at all? The point of EF, or any ORM, is to create a meaningful collection of conceptual data objects that represent your system's nouns. You then operate on those nouns, affecting their properties or accessing their behaviors, and let the ORM figure out how to map them to the tables + columns.

To answer your question, it sounds like you want the easiest solution, meaning the one where you have to write the least amount of code. If that is a correct assumption, then you might want to go with Database first. You can have EF generate your entity classes, but like you said, you will still have to either manually create viewmodel classes or come up with some kind of AOP (using T4 maybe) to generate these for you. But anytime you give a tool the power to generate something for you, you lose control over it.

I prefer code first / conceptual model first, but I also like to have complete control over everything in the application (aside from infrastructure concerns which can be delegated to tools and frameworks like AutoMapper, EF, T4MVC, etc). Yes, it is more work, because I have to create the entity classes, the viewmodel classes, and the views, (and controllers, and action filters, and html helpers, and rrrvrything else). If your domain is one where you can just map text boxes straight to database tables & columns, then maybe this would be overkill for you.

于 2012-08-02T15:22:55.913 回答