Fre*_*0rz 6 .net c# oop linq-to-sql
对于我的实习,我正在创建一个与后台数据库进行通信的程序.该程序以MVC(模型 - 视图 - 控制器)方式分层.
对于View我想通过我称为DataAccesLayer(DAL)的东西来访问数据.因为该视图具有最少的知识,所以我希望它为我想要调用的查询传递ID.呼叫将在DAL内完成.然后使用ID我想要一个包含查询的类来返回查询,然后在DAL中执行它.用于可视化的图片.

我现在遇到的问题是如何在我的Read函数中执行查询.DAL的代码如下:
public class DataAccesLayer
{
private Queries queryloader;
private RoadsoftDigitacV8DataContext db;
public DataAccesLayer()
{
queryloader = new Queries();
db = new RoadsoftDigitacV8DataContext();
}
public List Read(int ID)
{
IQueryable query;
query = queryloader.GetQuery(ID);
return query.ToList();
}
}
Run Code Online (Sandbox Code Playgroud)
Queries类的代码:
public class Queries
{
private Dictionary<int, IQueryable object> queryDict;
private ErrorLoggerWinLog logger;
public Queries()
{
logger = ErrorLoggerWinLog.Instance();
queryDict = new Dictionary<int, IQueryable object>();
queryDict.Add(1, from d in db.Drivers
select d);
}
public object GetQuery(int ID)
{
var query;
if(queryDict.TryGetValue(ID, out query) == false)
{
logger.WriteLine("Queries", "Could not find the query specified", ErrorLoggerWinLog.loggerlevel.Error);
}
return query;
}
}
Run Code Online (Sandbox Code Playgroud)
我想知道,这可能吗?现在它似乎不起作用.我可能忘了什么或遗漏了一些重要的东西.有没有人有这种设置的经验,或者应该看一个完全不同的解决方案?
编辑:现在它似乎没有执行查询,就像我在读取函数中缺少一个命令.虽然填充了Datacontext,但它正在程序的不同部分完成.
编辑2:现在我正在研究IRepository模式,这是一个很棒的学习经历,非常感谢所有花时间发表评论和回复的人!
在任何时候你都queryDict只有一个元素;唯一GetQuery()不记录错误消息且不返回null 的情况是向其传递 1 时。结果Read(1)返回所有驱动程序的列表,否则抛出 aNullReferenceException因为,嗯,query为空。
你应该使用这样的东西:
public class DriversDAL
{
private RoadsoftDigitacV8DataContext db;
public DriversDAL()
{
db = new RoadsoftDigitacV8DataContext();
}
public Driver GetDriver(int ID)
{
return db.Drives.Single(d => d.ID == ID);
}
}
Run Code Online (Sandbox Code Playgroud)
如果你想要一个通用的解决方案,你应该使用通用的 dao 和存储库模式:
如何使用 LINQ to SQL 创建通用数据访问对象 (DAO) CRUD 方法
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |