Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC3:返回数据库查询结果的可重用方法_C#_Asp.net_Database_Asp.net Mvc 3 - Fatal编程技术网

C# ASP.NET MVC3:返回数据库查询结果的可重用方法

C# ASP.NET MVC3:返回数据库查询结果的可重用方法,c#,asp.net,database,asp.net-mvc-3,C#,Asp.net,Database,Asp.net Mvc 3,我想要一个可以调用的方法,该方法可以查询数据库中给定的查询字符串。可以从不同的控制器/操作引用。(注意,实际查询的复杂性相当大) 所以有几个问题: 代码会去哪里。一个新的控制器?帮手 我如何引用它(称之为) 如果遵循我当前的样式,返回类型将是什么对象 public Something WebCostCentres() { using (var db = Database.OpenConnectionString(Mynamespace.Properties.Settings.Defaul

我想要一个可以调用的方法,该方法可以查询数据库中给定的查询字符串。可以从不同的控制器/操作引用。(注意,实际查询的复杂性相当大)

所以有几个问题:

  • 代码会去哪里。一个新的控制器?帮手
  • 我如何引用它(称之为)
  • 如果遵循我当前的样式,返回类型将是什么对象

    public Something WebCostCentres()
    {
        using (var db = Database.OpenConnectionString(Mynamespace.Properties.Settings.Default.dbConnString, 
                               "System.Data.SqlClient"))
        {
            //ViewBag.CostCentres = db.Query("SELECT DISTINCT CostCentreNo");
            return db.Query("SELECT DISTINCT CostCentreNo");
        }
    }
    
  • 我将为此创建某种服务类
  • 您将服务装箱并调用该方法
  • 与查询方法的类型相同。IEnumerable将是一个选项。您可能必须调用ToList或ToArray来执行查询,因为连接可能已关闭
  • 服务层通常称为存储库。谷歌搜索这个,你会发现大量的例子

    1.代码会去哪里。一个新的控制器?帮手

    一节课。面向服务的架构

    2.我将如何引用它(称之为)

    作为页面中的局部变量,通过受信任的IOC容器填充

    3.如果遵循我当前的样式,返回类型将是什么对象


    没有。我们现在的款式已经过时了。听说过林克吗?NET的IQueryable扩展?它们并不是新的。它应该返回IEnumerable或IQueryable,并且通常是泛型的。或者在只返回一个数字的情况下使用特定类型。

    存储库模式也适用

    看一个例子

    re 3:只要查询返回一个完整的列表,而不是一个活动的
    IEnumerable
    ——因为连接将在使用之前关闭;可能需要一个收费表()您的
    数据库是什么?这是entlib吗?Webmatrix.Data很抱歉回复太慢,我的互联网中断了半个小时。阅读提供的答案。:)