I'm following Steve Sanderson's example from this ASP.NET MVC book
用手工创建模型,而不是用图表工具为我创建模型。因此,在我的模型名称空间中,我放置了一个名为
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到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());
}
This link
描述如何从存储过程返回多个结果集。
[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's Blog