【问题标题】:Return type from DAL class (Sql ce, Linq to Sql)DAL 类的返回类型(Sql ce、Linq to Sql)
【发布时间】:2011-05-30 15:54:10
【问题描述】:

使用 VS2008 和 Sql CE 3.5,最好是 Linq to Sql。

我正在学习数据库,但不确定 DAL 方法的返回类型以及如何/在何处将数据映射到我的业务对象:我不想要直接的 UI 绑定。

一个业务对象类 UserData 和一个类 UserDataList (Inherits List(Of UserData)) 在数据库中由表“Users”表示。我使用 SQL Compact 并运行创建 dbml/designer.vb 文件的 SqlMetal。这给了我一个带有 TableAttribute 的类:

<Table()>  _
Partial Public Class Users

我不确定如何使用这个类。我的业务对象是否应该知道此类,以便 DAL 可以返回类型 Users 或 List(Of Users) ?

因此,例如“UserDataService 类”是 DAL 的一部分,并且将具有例如函数 GetAll 和 GetById。这是正确的吗:?

Public Class UserDataService

Public Function GetAll() As List(Of Users)
    Dim ctx As New MyDB(connection)
    Dim q As List(Of Users) = From n In ctx.Users Select n
    Return q
End Function

Public Function GetById(ByVal id As Integer) As Users
    Dim ctx As New MyDB(connection)
    Dim q As Users = (From n In ctx.Users Where n.UserID = id Select n).Single
    Return q
End Function

然后,我可能有一个方法,比如在 UserDataList 类中,比如:

Public Class UserDataList
   Inherits List(Of UserData)

Public Sub LoadFromDatabase()

      Me.clear()
      Dim database as New UserDataService
      dim users as List(Of Users)
      users = database.GetAll()

      For each u in users
          dim newUser as new UserData
          newUser.Id = u.Id
          newUser.Name = u.Name
         Me.Add(newUser)
      Next

End Sub

End Class

这是一种明智的做法吗?将不胜感激任何建议/替代方案,因为这是我第一次尝试数据库 DAL。

干杯!

编辑:

似乎我对 GetAll() 和 GetAllById() 的查询/返回类型有问题.. 不知道该怎么做..

【问题讨论】:

  • 为什么不直接使用 linq to sql 类型呢?它们是部分类定义,因此如果您需要向它们添加额外的“东西”,您可以...
  • 作为业务对象类型.. 嗯,是的,我想过,但不确定这是否合适。我会试试的。

标签: sql sql-server-ce data-access-layer


【解决方案1】:

打开 Visual Studio。

打开服务器连接选项卡并连接到您的 SQL 服务器。

在您的项目中,添加一个新的 Linq To SQL 数据上下文。这将添加一个新文件。在设计器中打开它后,将表从数据库拖放到 SQL 数据上下文中。

此时,您现在可以进入您的代码并说。

NameOfYourDataContext dc = new NameOfYourDataContext();

var query = from row in dc.table
            where property == 0 //Filter if needed
            select row;

//OR var query = dc.table.where(row => row.Property == 0);

int i = 0;

foreach(var row in query)
{
   row.property = i++;
}

dc.SubmitChanges();

如果您真的想控制创建的类,那么我建议您查看 SQL Metal 工具,该工具可以从 xml 文件创建数据上下文。

【讨论】:

  • 谢谢!我确实使用 SqlMetal 和它产生的数据上下文类。也许我的问题不是很清楚,但我试图弄清楚的是如何构造 DAL 类、方法、返回类型等。DAL 如何与 BLL 通信,与哪些类等。也许这对大多数人来说是显而易见的,但对我来说还不是:)
  • Linqtosql 并不是真正为此而设计的。在以类型安全的方式编写查询时,Linq 可以极大地帮助您。如果你想在你的代码中传递东西,你可能想看看实体框架
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-05-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多