c# – 将遗留专有Web应用程序重写为MVC3 / Entity-Code-First

前端之家收集整理的这篇文章主要介绍了c# – 将遗留专有Web应用程序重写为MVC3 / Entity-Code-First前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
几个月来,我发布了一些关于ASP.NET应用程序和数据库抽象层结构的问题,目的是重写(从头开始)一个遗留的Web应用程序.我最近偶然发现了MVC3 / Entity-Code-First,花了一些时间后,它已经爱上了它的工作方式,如何抽象出来,我正在寻找任何借口来使用它!

遗留应用程序是一个C/C++LI窗口服务,它生成它自己的HTML(非常老派的HTML,其中CSS只用于颜色,表格比比皆是),并且界面与业务逻辑紧密耦合.基本上,任何事情都会有所改善.

然而,也许这是因为我还没有花足够的时间与MVC,我有一些唠叨的疑虑,并想知道你们中的一些MVC-Pros是否可以在我的方向上挥发他们的经验.

>遗留应用程序使用自定义控件(它们自己的形式)将组合框绑定到数据,并根据另一个组合框中的选择动态重新填充依赖组合框.在ASP.NET中,这个问题很容易回答,因为只需在页面上抛出一个asp:DataList控件,将其绑定到数据源即可.一些简单的代码允许您过滤所选值上的其他组合框.在ASP.NET中,实现另一个数据列表也很容易,甚至以这种方式自动化依赖数据(这将很好地模仿遗留应用程序的行为).我似乎无法在MVC中找到自定义控件的概念,但我认为这种东西是由jQuery调用处理来获取数据并将其放入组合框中.但是每个包含一个组合框的每个组合框都能完成吗?这是一个部分视图的情况,传递适当的参数,或者这只是愚蠢的?
>我想这与实体框架的关系比MVC更多,但我在网上发现的大多数例子和教程都会执行LINQ查询以返回要显示的对象集合,例如,从MvcMovie示例:

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的表.如何使用Entity-framework和views编写类似的内容?在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还没有进入.这对于遗留表/列的映射非常好,我不完全确定为什么它在这一点上被遗漏了(至少,我的intellisense说它不存在!)有没有人知道这可能会发生什么?我可以暂时不用它,但最终它会非常有用.

对不起,这是一个很长的问题.经过ASP.NET和MVC3的多年调查工作,我真的很想使用MVC3!

解决方法

如果我设法正确提取问题,那么这将是我的回复

>您对主 – 详细信息下拉(或其他控件)的思考是正确的. jQuery AJAX / JSON调用(主要是GET)将是您所需要的.如果您的页面上只有一个下拉列表,那么当然您不需要这种交互性 – 您可以在控制器操作中为它准备模型(创建一个SelectList对象).
>在这里,您最有可能最终使用某种类型的网格系统,如jqGrid或Flexigrid.他们做了大部分有关过滤/搜索/查询的事情.您仍然需要提供将提供数据的JSON控制器操作.
>是的,您可以通过EF执行sql.有ExecuteStoreQuery()和ExecuteStoreCommand().这些更多关于那些http://msdn.microsoft.com/en-us/library/ee358769.aspx
>您可以从视图中调用RenderAction()并使此操作按需准备数据(无论何时调用它)并渲染出部分(或正常)视图并将数据(模型)提供给它. RenderPartial()对此更加笨拙 – 它要求您在调用RenderPartial()的视图中使模型已经可用. RenderPartial()永远不会返回到控制器操作 – 它只是使用您在视图中调用时提供的模型呈现模板中定义的HTML.
>不幸的是我不知道答案.

HTH

猜你在找的C#相关文章