【发布时间】:2010-02-08 23:15:20
【问题描述】:
我很难弄清楚如何为我的问题指定一个好的搜索词:在 Visual Studio 2008 中使用 Linq to sql 分离 gui 和数据库交互。
根据我在 c# 课程中的老师所说,让 GUI 依赖于获取数据的特定方式是不正确的。
我的项目目前的设置方式是我们有一个存储所有内容的 mssql 数据库。 该解决方案分为 4 个单独的项目。 UserGUI、AdminGUI、Logic 和 Db。
现在使用 linq 填充列表框和类似的东西,我使用类似的东西:
来自项目UserGUI中的windows窗体:
//The activeReservationBindingSource has Db.ActiveReservation as it's value
private void refreshReservation() {
activeReservationBindingSource.DataSource = logic.getActiveReservationsQry();
}
到逻辑项目:
public IQueryable getActiveReservationsQry() {
return dbOperations.getActiveReservationsQry(this.currentMemberId);
}
到数据库项目:
public IQueryable getActiveReservationsQry(int memberId) {
var qry =
from active in db.ActiveReservations
where active.memberId == memberId
orderby active.reservationId
select active;
return qry;
}
这对我来说很有意义,因为我可以将列表框中的项目一直发送到数据库项目,并且可以轻松地将内容更新/插入到 mssql 数据库中。问题是很难从 mssql 数据库合并到一个访问版本。
我应该阅读哪些内容以了解如何正确执行此操作?当我创建 dbml 文件时,创建自己的类是否具有与 Visual Studio 为我生成的值相同的值?然后我应该在逻辑项目中填充例如我传递给 GUI 的列表吗?对我来说,这似乎是“双重工作”,但也许这是正确的方法?
请注意,我们尚未阅读有关设计模式或业务逻辑的任何内容,这似乎是一个相当大的主题,我期待稍后在课程框架之外进行探索。
我还认为 IQueryable 继承自 IEnumerable,也许这是要走的路,但我没有找到任何对我有意义的信息来说明如何实际实现这一点。
GUI 还知道我认为是坏事但不知道如何摆脱的数据源。
请理解,我今天在该项目唯一可用的辅导课上与我的老师尝试了半个小时,然后花了一天的大部分时间试图在谷歌、SO 和同学那里找到类似的答案,但没有任何结果.
【问题讨论】:
标签: c# linq-to-sql oop