代码之家  ›  专栏  ›  技术社区  ›  dcolumbus

调用存储过程的ASP.NET MVC

  •  2
  • dcolumbus  · 技术社区  · 15 年前

    我想听听你的想法。。。

    所以我有一个允许小寄存器的视图。。。以及存储过程。

    我在打电话的时候看到了这些伪“仓库”。。。对我来说,这只是一个额外的洞,需要钻,以便打电话。这引出了三个理由:

    1)伪库的意义何在?

    2)进行存储过程调用的最佳位置是:在views controller函数内还是引用其他函数?

    3)如何接收存储的过程结果(即失败的成功)?

    这是我的电话:

    long? tmp = 1234;
    LinqToPartyDataContext lq = new LinqToPartyDataContext();
    lq.spCreatePersonaParty(ref tmp,
        model.FirstName,
        null,
        null,
        null,
        null,
        null,
        null,
        null,
        model.EmailAddress,
        null,
        null,
        null,
        null,
        null,
        model.ZipCode,
        null,
        null);
    

    我怎么得到结果?

    1 回复  |  直到 13 年前
        1
  •  1
  •   RPM1984    15 年前

    1)伪库的意义何在?

    从用户界面隐藏底层实现细节。例如:

    IFooRepository repo;
    var foo = repo.FindSingle(1);
    

    用户界面只知道它正在调用 某物 那会找回想要的东西。为什么要关心实际的细节?它所关心的只是得到它想要的结果。

    实际实现可以是L2SQL存储库、实体框架,甚至是典型的ADO.NET实现。

    2)进行存储过程调用的最佳位置是:在views controller函数内还是引用其他函数?

    当然不是从用户界面。

    创建一个接口,该接口将参数公开给存储过程 控制器 可以调用:

    var result = repository.FindSomethingSpecific(param1, param2);
    return View(result);
    

    3)如何接收存储的过程结果(即失败的成功)?

    这实际上取决于持久层(EF/L2SQL/classic ADO)。

    如果使用EF,可以将存储过程的结果返回到POCO中,UI可以通过模型绑定访问POCO。

    如果使用L2SQL(不支持POCO),则必须手动投影到POCO(从左到右复制)中,并绑定到该POCO。

    如果使用经典的ADO.NET,则必须手动遍历结果集并投影到POCO中。