【发布时间】:2013-03-13 16:37:00
【问题描述】:
我在 Linq to Entites 上苦苦挣扎。我是 EF5 和 Linq 的新手。我正在用 VB.NET 编程。我一直在使用将数据集作为 DAL 返回到 BLL 中的表适配器,然后我将其链接到 ObjectDataSource。现在我从 VS2005 ASP.NET 2.0 升级到 VS2012 到 ASO,.NET 4.0 以使用 EF5,并且我已将 EF5 设置为 DAL,我正在尝试重写 BAL 以使用 Linq to Entities 转到 ObjectDataSource。我可以使用我使用外键设置的导航对多个表进行一些复杂的查询,但我不明白如何让返回类型与需要数据集的 ObjectDataSource 一起使用。
ContentQ = From ct In DAL.Contents, cd In ct.ContentDuplicateTypes, ce In ct.ContentEditors _
Where ct.ContentId = Contentid And cd.ShowOnWeb = ShowOnWeb And cd.Hide = Hide And ce.UserId = UserId And ct.websiteId = websiteid Select ct, cd, ce
例如用于返回单个表 ContentQ= From ct in DAL.Contents select ct
为什么这在下面起作用?为什么我必须使用 include 方法填充此类以将其放入具有 2 个表的一对多表的 ObjectDataSource 中?
<System.ComponentModel.DataObjectMethodAttribute(ComponentModel.DataObjectMethodType.Select, True)> _
Public Function GetContentFiles() As ContentData
Dim objContentData As New ContentData
Using _SBEF As New SBEF5
Dim objContentDuplicateType = From d In _SBEF.ContentDuplicateTypes.Include("Content") Select d
For Each objQuery In objContentDuplicateType.ToList
With objContentData
'Content
.Description = objQuery.Content.Description
.FileName = objQuery.Content.FileName
.Draft_Path = objQuery.Content.Draft_Path
.Live_Path = objQuery.Content.Live_Path
.HeaderTitle = objQuery.Content.HeaderTitle
'ContentDuplicateType
.ContentId = objQuery.ContentId
.DisplayHeader = objQuery.DisplayHeader
.OrderNumber = objQuery.OrderNumber
.ShowOnWeb = objQuery.ShowOnWeb
.Hide = objQuery.Hide
.DateCreated = objQuery.DateCreated
.ContentTypeID = objQuery.ContentTypeId
End With
Next
GetContentFiles = objContentData
End Using
End Function
【问题讨论】:
-
一目了然,并且不了解您的应用程序的更多信息,您可能需要将 ObjectDataSource 映射到正在返回的实体(或将实体映射到 ObjectDataSource 正在使用的对象),而不是一个数据集。我从未将 ObjectDataSource 与 DataSet 一起使用 - 仅与我编写的自定义类一起使用。
-
现在让我扩展这个问题。看来,在 GridView 中获取分页和排序的唯一方法是使用自定义分页和自定义排序,其中必须传入表格的 sorttag 和 MaxCount。有趣的是,来自 Table 适配器的 DataSet 会自动获取它。我想知道 Linq to Entity 开销是否与 DataSets 相同?嗯嗯
标签: vb.net linq objectdatasource entities bll