【发布时间】:2019-05-09 12:02:18
【问题描述】:
我目前正在使用 EF 6 执行以下操作。执行一个存储过程,然后带入我需要使用的数据。每个应用程序运行的数据通常为 30-40 行。
然后我遍历 var、object、table(无论你想怎么称呼它),在每一行上执行类似(有时不同)的任务。它工作得很好。我能够创建一个 Entity 对象,公开它的不同复杂功能,然后创建一个 var 进行迭代。
喜欢:
foreach (var result in StoredProcedureResult)
{
string strFirstname = result.FirstName
string strLastName = result.LastName
//more logic goes here using those variables and interacting with another app
}
我最近认为如果我有一个专门用于访问数据的类会很酷。这样,我可以只引用那个类,将相应的连接字符串扔到我的 app.config 中,然后我可以将两组逻辑分开。因此,当尝试在该结构中执行上述操作时,我会遇到无法返回 var 或尝试匹配对象返回类型的点。存储过程执行的返回类型是对象(我无法迭代)。
所以我的问题是,除了 var 结果之外,如何从这个数据访问类返回上述示例?
如果我遗漏了什么,或者因为我做错了而无法做到,请告诉我。它就出现在我的脑海中。
【问题讨论】:
-
你看过 EF 中的函数导入吗?
-
@Marty 嘿,感谢您的回复。我的印象是我已经在使用函数导入了?这不是上面代码 sn-p 的结果吗? StoredProcedureResult 来自执行以下操作:
EntityName db = new EntityName(); var StoredProcedureResult = db.Sp_That_Returns_SomeRows_And_Columns(); db.Dispose(); -
首先:如果
EntityName是 DbContext 的类名,那么更常用的方法是使用using而不是Disposesee doc。第二:函数导入应该允许您指定过程返回一个复杂类型,这样您将返回该类型而不是对象 -
@Marty 好的,将其包装在 using.hmm 中,它看起来确实在下拉菜单中设置为“复杂”。所以完全限定类型 VS 调用它是:
System.Data.Entity.Core.Objects.ObjectResult -
@Marty 很好,上面似乎解决了返回类型问题,
ObjectResult是一个可以迭代的返回类型。还有一个小问题。因此,在我以返回名字或姓氏为例的帖子中,您可以看到为特定列创建了 get 和 set,并且在 DataAccessLayer 中我可以看到这些方法。问题是,在引用 DAL 的项目中,string strFirstname = result.FirstName在您键入result.时没有显示列列表的智能感知,所以我想我一定在这里遗漏了一些东西。
标签: c# entity-framework data-access-layer