繁体   English   中英

面向对象的Linq2Sql查询类

[英]Object Orientated Linq2Sql query class

对于我的实习,我正在创建一个与后台数据库进行通信的程序。 该程序以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();

    }

}

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;
    }
}

我想知道,这可能吗? 现在它似乎不起作用。 我可能忘了什么或遗漏了一些重要的东西。 有没有人有这种设置的经验,或者应该看一个完全不同的解决方案?

编辑:现在它似乎没有执行查询,就像我在读取函数中缺少一个命令。 虽然填充了Datacontext,但它正在程序的不同部分完成。

编辑2:现在我正在研究IRepository模式,这是一个很棒的学习经历,非常感谢所有花时间发表评论和回复的人!

您的queryDict只有一个元素; GetQuery()没有记录错误消息并且不返回null的唯一时间是将1传递给它。 因此, Read(1)返回所有驱动程序的列表,否则抛出NullReferenceException因为query为null。

你应该使用这样的东西:

    public class DriversDAL
    {
        private RoadsoftDigitacV8DataContext db;

        public DriversDAL()
        {
            db = new RoadsoftDigitacV8DataContext();
        }

        public Driver GetDriver(int ID)
        {
            return db.Drives.Single(d => d.ID == ID);
        }

    }

如果您需要通用解决方案,则应使用泛型dao和Repository模式:

如何使用LINQ to SQL创建通用数据访问对象(DAO)CRUD方法

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM