NHibernate在sql搜索中使用.where()条件或以后使用LINQ?

时间:2014-10-27 08:34:26

标签: c# linq nhibernate

我还在学习并尝试让我的代码更好,所以我决定使用Interface和泛型来改善我的CRUD代码。

到目前为止,我的数据库中的每个表都有大量的回购。现在我正试图通过使用公共存储库来减少该数量。

问题是我的一些存储库要求使用比简单SELECT更具体的搜索条件。

例如:

///<summary>
///Get handle for stanowisko where user defined that it should be used to count time of work for this machine
///</summary>
public HandleCzujnikiModel Select(string stanowisko, bool doObliczeniaCzasuPracy)
{
    using (ISession session = NHibernateHelper.OpenSession())
    {

        return obj = session.Query<HandleCzujnikiModel>()
            .Where(c => c.Stanowisko == stanowisko && c.DoObliczeniaCzasuPracy == doObliczeniaCzasuPracy).FirstOrDefault();

    }
}

NHibernate将创建一个SQL。

现在我的问题是我是否在我的存储库之后创建了大量的存储库,我保留了常见的SELECT,UPDATE等...并且有更多特定操作的额外方法。

或者我是否使用简单的SELECT并稍后使用LINQ服务器端来获得我想要的结果。

我认为这两种解决方案都有其优点和缺点。

1)如果仅使用,, main“存储库,我可以大大减少类的数量。 2)但是这会导致性能下降?因为我必须从数据库中选择更多记录,所以更多使用额外代码和.Where子句使用LINQ来获得结果。

现在我的知识有限,因此我必须从StackOverflow众神寻求答案:)

干杯!

1 个答案:

答案 0 :(得分:1)

根据经验:如果您可以对数据库进行过滤,请在那里进行过滤。

这意味着在你的情况下:如果你可以生成一个NHibernate查询,那么在NHibernate查询中进行过滤比获取所有行并在之后使用Linq过滤它们要好得多。

如果你没有很多行,或者你正在使用本地开发数据库,​​它似乎没什么大不了的,但如果与数据库的连接速度很慢(呃)并且你有很多行在数据库中,您将看到将所有行发送到客户端所需的性能。

我们经历过的另一件事:你的NHibernate对象越复杂(使用其他表中的字段)这个问题变得越来越糟。

如果你正在设计你的应用程序,那么你很可能会遇到n + 1问题: What is SELECT N+1?