Linq To SQL DAL和查找数据源

时间:2009-06-05 17:28:41

标签: vb.net linq-to-sql data-access-layer

我正在学习linq to sql,我正在尝试在我的网页中设置一个查找组合框。我使用的是linq数据源,但后来我将我的linqtosql代码移动到了我自己的DAL dll类库(从app_code文件夹中取出)。因此,我正在转换页面代码,以便仍然可以通过biz对象驱动查找。

这是我在商业层面所做的......

Public Class KosherTypes

    Public Shared Function GetKosherTypes() As List(Of KosherTypeLookup)
        Dim db As New DBDataContext

        Dim types = From kt In db.KosherTypes _
                    Where kt.IsDeleted = False _
                    Order By kt.Name _
                    Select New KosherTypeLookup With {.Name = kt.Name, .ID = kt.KosherTypeID}

        Return types.ToList

    End Function

End Class

然后我设置了一个对象数据源并将其映射到这个类。

我有几个问题,因为当我进行互联网搜索时,我没有找到任何似乎正在这样做的人,但我知道查找表/组合框很常见......

  1. 我完全错过了什么,有更好的方法可以做到这一点吗?

  2. 我去了一个列表,但我可以返回一个IEnumerable或IQueryable。在我看来,似乎IQueryable有更多的功能为linq到SQL,但因为我返回一个简单的两列列表然后我只需要返回一个IEnumerable或List。我选择了List,因为它是强类型的。我做出了一个好的决定吗? AKA - 我应该刚刚返回并且IEnumerable或者可能是IQueryable吗?

  3. 谢谢!

1 个答案:

答案 0 :(得分:1)

我会以相反的顺序回答:

  1. 我不会在你的repos / DAL之外使用IQueryable,原因很简单,因为执行被推迟,你无法控制究竟执行的是什么(即,aribtrary函数可以被指定为WHERE的委托),维护和测试要困难得多。我没有看到你返回IEnumberable(Of KosherTypeLookup)的问题。
  2. 如果查找是永远或很少更改的静态查找,您可能希望查看在第一次使用后缓存查找的方法,以避免每次调用该框时都必须访问数据库。但这实际上取决于你的预期负荷。与往常一样,性能/负载测试将突出显示您需要优化的位置。