【问题标题】:Using EF5 Linq to Entities as DAL to BLL to ObjectDataSource使用 EF5 Linq to Entities 作为 DAL 到 BLL 到 ObjectDataSource
【发布时间】: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


【解决方案1】:

您为什么不使用EntityDataSource

【讨论】:

  • EntityDataSource 仅限于单个表(实体),在查询多个表时无法工作。它锁定了编辑、插入和删除。
  • 我看到了如何从单个实体(表)中获取数据,那么使用导航从多个表中提取的查询呢?类型是 Anomynious(sic),我是否将函数类型设置为仅 IQueryable?
  • 如果我创建一个视图并创建一个实体,CRUD 仍然可以从 GridView 工作吗?底线我正在尝试替换我的 DAL,它使用表适配器和实体框架工作 Linq to Entities,然后为业务层类提供属性、选择、插入、删除以与 ObjectDataSource 一起使用。
  • 任何对单个实体使用 select 语句和使用导航元素查询多个实体的 select 语句的业务类示例,然后在 ObjectDataSource 中使用?
  • 你能举一个例子来说明查询多个表的含义吗?您可以使用多个 EDS。导航属性有助于公开相关数据。我通常使用 IQueryable 对象,但我认为还有其他选择。
猜你喜欢
  • 1970-01-01
  • 2010-12-30
  • 2023-04-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-26
  • 1970-01-01
  • 2019-02-01
相关资源
最近更新 更多