【发布时间】:2011-06-17 22:26:36
【问题描述】:
几个月来,我发布了一些关于 ASP.NET 应用程序和数据库抽象层的结构的问题,目的是为了重写(从头开始)旧版 Web 应用程序。我最近偶然发现了 MVC3/Entity-Code-First,在花了一些时间使用它之后,我爱上了它的工作原理,事物是如何抽象出来的,我正在寻找任何使用它的借口!
遗留应用程序是一个 C++/CLI windows 服务,它生成它自己的 HTML(非常老式的 HTML,CSS 仅用于颜色和表格),并且界面与业务逻辑紧密耦合。基本上,任何事情都会有所改进。
但是,也许这是因为我还没有花足够的时间在 MVC 上,我有一些挥之不去的疑问,想知道你们中的一些 MVC 专业人士是否可以将他们的经验转向我的方向。
旧版应用程序使用自定义控件(它自己的形式)将组合框绑定到数据,并根据另一个组合框的选择动态重新填充相关的组合框。在 ASP.NET 中,这个问题很容易回答,因为只需在页面上抛出一个
asp:DataList控件,将其绑定到数据源,瞧。一些简单的代码允许您然后过滤所选值的其他组合框。在 ASP.NET 中也很容易实现另一个数据列表,甚至以这种方式自动化依赖数据(这将很好地模仿遗留应用程序的行为)。我似乎无法在 MVC 中找到自定义控件的概念,尽管我假设这种东西是由 jQuery 调用处理的,以获取数据并将其放入组合框中。但这是否适用于每个页面上的每个组合框?这是传递适当参数的局部视图的情况,还是这只是愚蠢的?-
我猜这与实体框架的关系比 MVC 更多,但我在网上找到的大多数示例和教程都执行 LINQ 查询以返回要显示的对象集合,例如来自 MvcMovie 示例的 this :
public ActionResult Index() { var movies = from m in db.Movies where m.ReleaseDate > new DateTime(1984, 6, 1) select m; return View(movies.ToList()); }然后在视图中使用
@foreach循环进行渲染。这一切都很棒。遗留应用程序有一个浏览页面,供系统的所有其他区域使用(超过 50 个)。它通过检查为登录用户定义的列顺序、展平任何外键(以便显示外表上的字段而不是非用户友好的主键值)来做到这一点,并且还允许用户应用自定义过滤器到任何列。它也适用于行数超过 100k 的表。如何使用实体框架和视图编写类似的东西?在 ASP.NET 中,我可能会通过动态生成某种网格视图并让它自动生成列并应用过滤器来解决这个问题。这似乎让我在 MVC 中工作更多。我错过了什么? -
旧版应用程序具有多个操作大型数据集的操作。现在因为它是一项服务,它可以启动这些线程而不必担心被关闭。我在 SO 上的一个问题是关于静态管理器的存在以及 AppPool 回收的引入,但我认为拥有辅助服务是一个不错的选择。也就是说,旧版应用程序将更新语句应用于大型记录组而不是单行。 Entity-Framework 是否可以在不针对绕过正常模型的数据库编写自定义 SQL 的情况下实现这一点?我希望我不必做这样的事情(不是我愿意,这只是举例)
var records = from rec in myTable where someField = someValue select rec; foreach(rec in records) rec.applyCalculation(); db.SaveDbChanges();我怀疑这可能需要很多时间,而旧版应用程序会这样做:
UPDATE myTable SET field1 = calc WHERE someField = someValue所以我并不完全清楚我们如何以这种方式使用我们的模型。
旧版应用程序的布局中有一些数据面板,可以在您所在的任何页面上显示。在 Stackoverflow 上查看这里,我发现 this 问题,这意味着 每个 视图都需要将此信息传递给布局?是这样,还是有更好的方法?理想情况下,我希望我的布局能够访问特定的模型/存储库并在侧面板中显示数据。添加到每个视图页面可能会非常重复并且容易出错。更不用说如果我需要修改某些东西需要花费的时间。局部视图可以在这里使用,但我再次不确定如何在布局页面上将模型传递给它。
最后,我很失望,在安装 Ef-Code-First 之后,发现一个非常好的属性,
SourceName还没有进入。这在映射遗留表/列时会非常好,我不完全确定为什么此时它被遗漏了(至少,我的智能感知器说它不存在!)有没有人知道什么时候会发生这种情况?我可以暂时不用它,但最终它会非常有用。
对于冗长的问题,我们深表歉意。经过多年对 ASP.NET 和 MVC3 的调查工作,我真的很想使用 MVC3!
【问题讨论】:
-
阅读标题和最后一行...其他所有内容都太多了。你自己说它很长,试着把它浓缩成一个易于管理的问题。
-
对于带有 mvc 的 jQuery 东西看这里awesome.codeplex.com
标签: c# asp.net asp.net-mvc entity-framework ef-code-first