簡體   English   中英

使用自定義模型和存儲庫的IMultipleResults

[英]IMultipleResults Using Custom Model & Repository

我正在從這本ASP.NET MVC書中遵循Steve Sanderson的示例,該示例是關於手動創建模型的,而不是使用圖表工具為我完成。 因此,在模型名稱空間中,我放置了一個名為MySystemModel類,並在其中添加了以下內容

[Table(Name="tblCC_Business")]
public class Business
{
  [Column(IsPrimaryKey=true, IsDbGenerated=false)]
  public string BusinessID { get; set; }

   // this is done because Business column and Business have interfering names
  [Column(Name="Business")] public string BusinessCol { get; set; }
}

這部分都很好。 但是問題是從存儲過程返回多個結果集,但是將SQL與LINQ建模混合並匹配。 我們這樣做是因為LINQ to SQL轉換對於我們的某些查詢而言太慢了(在這里爭論這一點確實沒有意義,這是一項業務需求)。 因此,基本上,我在“存儲庫”中使用實際的SQL語句以及LINQ模型,如下所示:

public IEnumerable<MyType> ListData(int? arg)
{
    string query = "SELECT * FROM MyTable WHERE argument = {0}";

    return _dc.ExecuteQuery<MyType>(query, arg);
    //c.GetTable<MyType>(); <-- this is another way of getting all data out quickly
}

現在,我遇到的問題是如何在不擴展DataContext的情況下返回多個結果集,如下所示:

public ContractsControlRepository()
{
  _dc = new DataContext(ConfigurationManager.ConnectionStrings["MyConnectionString"].ToString());
}

該鏈接描述了如何從存儲過程中返回多個結果集。

[Function(Name="dbo.VariableResultShapes")]
[ResultType(typeof(VariableResultShapesResult1))]
[ResultType(typeof(VariableResultShapesResult2))]
public IMultipleResults VariableResultShapes([Parameter(DbType="Int")] System.Nullable<int> shape)
{
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())), shape);
    return ((IMultipleResults)(result.ReturnValue));
}

那么,如何將其轉換為可供存儲庫使用的內容? 我只需要能夠從包含DataContext的存儲庫中返回多個結果集,並且不對其進行擴展。 如果像我一樣將以前的摘錄復制並粘貼到存儲庫中,它將僅說明ExecuteMethodCall不可用,但這僅在擴展DataContext可用。

資源資源

Guy Berstein的博客

每次我問了一個連續幾天困擾我的問題,我最終都在幾分鍾之內找到了答案。 無論如何,此問題的答案是您必須在存儲庫中擴展DataContext 如果像我一樣,您擔心必須在每個控制器中都指定連接字符串,則可以將存儲庫類中的構造函數更改為以下形式:

public ContractsControlRepository()
      : base(ConfigurationManager.ConnectionStrings["AccountsConnectionString"].ToString()) { }

這樣,當您實例化存儲庫時,就已經為您建立了連接,這使您不必擔心,實際上集中了指定連接字符串。 擴展DataContext還意味着您可以訪問所有受保護的方法,例如ExecuteMethodCall ,該方法用於調用存儲過程並(如果願意)帶回多個結果集。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM