MVC 4强类型数据,无需ORM即可查看

时间:2013-04-19 09:40:18

标签: asp.net-mvc linq entity-framework

我见过有关使用直接SQL进行MVC数据访问的其他问题,例如here。大多数回复都不回答问题,但要求

  

“你为什么不想使用ORM,EF,Linq等?”

  1. 我的小组从数据仓库中进行自定义报告,该数据仓库需要大量基于用户GUI参数选择操作的复杂,高度调整的Oracle查询。

  2. 我最新的项目是为SQL报表开发人员开发一个SQL插件报表工具。他们将使用伪参数为报告创建预调整的SQL,并通过GUI输入(和存储)。然后,GUI将提示他们在运行时需要显示/请求的参数定义(名称和类型),以最终替换伪变量。

  3. 因此SQL语句可能如下所示:

    SELECT * FROM orders WHERE order date BETWEEN '<Date1>' AND '<Date2>'
    

    然后,报表开发人员将通过GUI添加两个名为Date1Date2的参数,并将其标记为日期字段。

    然后,最终用户将选择该报告,并提示Date1Date2,GUI将执行替换并运行SQL。

    正如你所看到的,我别无选择,只能使用直接SQL(特别是在第二个例子中,并且理解我将不得不放弃在第二个中强烈输入)。

    所以我的问题是:

    1. 何时需要绕过EF / Linq(并且肯定有理由),MVC 4中的最佳做法是什么?
    2. 当我提前知道输出列时,如何最好强力输入?
    3. 和CRUD处理?
    4. 在这方面,有人能指出任何基于非EF / Linq编码的例子吗?

1 个答案:

答案 0 :(得分:2)

我认为这是一个有点开放的问题,所以这是我的2c。 (如果是,请转到最后一节)

  1. 对我而言,“通过传递EF / Linq”并非如此,而是需要选择合适的数据持久性库。我使用了PetaPoco,Ado.Net,NHibernate / ActiveRecord,Linq2Sql,EF(我的主要选择)和MVC。

    最佳实践实际上来自于意识到控制器仍然是表示层的一部分,并且它不应该处理除HttpContext相关操作+调用业务逻辑服务类之外的任何事情。

    我安排我的课程:
    演示文稿(MVC) - &gt;逻辑服务(简单类) - &gt;数据访问(上下文包含在“存储库”中) 所以我无法想象是否使用EF会对asp.net MVC产生任何影响。

  2. 对我来说,Data Access会在DTO中返回数据,例如

    公开列表GetAllFoos()

    该方法字符串是从xml等连接还是执行简单的Context.Foos.ToList()与应用程序的其余部分无关。我只关心数据访问不会返回一个包含字符串匹配列的DataSet。那些留在DAL。

  3. 请参阅第1点和第2点。我的存储库上有CRUD方法。如何完成与其他应用程序无关。获取我的存储库类的最基本接口之一:

    公共接口IFooRepository {   void Save(Foo foo)   Foo Get(int id)   void Create(Foo foo)   void删除(int id) }

    还有一点没有提及,DI也很重要。具体的实现“FooRepository”可以选择请求依赖,例如Web服务,上下文类等。然而,这些依赖于依赖于接口的调用者完全无关。

  4. 如果您在上述3点后仍需要示例,请发表评论,我会使用Ado.net制作一些非常简单的内容。

  5. =============================================== ============================
    EF或不EF。

    对我来说,如果使用新架构开始一个新项目,我首先使用EF代码。

    将新代码安装到旧数据库+旧项目没有ORM映射我可以重用= PetaPoco。

    =============================================== ============================
    在您的项目中:

    “SQL报告开发人员的SQL插件报告工具”。 “sql报告服务?我不确定你为什么要做任何事情? SSRS不是已经这样做了吗? (输入sql语句/数据源,生成参数表格等)。

    如果不是,我会质疑设计决定。 IMVHO,对应用程序用户的需求(我不在乎它是“报告开发者”还是w / e)输入SQL语句通常源于“建筑宇航员”。当您通过GUI作为字符串输入时,如何调试SQL语句?你怎么知道表格和关系?你要么深入研究SSMS并回到gui,要么建立复杂的UI(又名重建SSMS)。

    在一天结束时,如果您想要为数以千计的不同用户提供大量报告,您必须为此付费。我看到太多“建筑宇航员”暴露应用程序接受SQL语句只是为了让每个人都浪费时间猜测应该放入什么。完全没有成本节省。

    好的,如果你必须那样做,那么......祝你好运。最好的办法是作为DataTable返回并将行/列/数据转储到视图中,嵌套的foreach循环遍历行然后列。