小编Bra*_*zel的帖子

如何为NHibernate LINQ语句设置超时

我正在使用Fluent NHibernate进行ORM.在这样做的过程中,我尝试使用NHibernate LINQ语法以LINQ的强大功能获取一组数据.我已经正常工作并执行的代码,例外情况是,如果运行时间超过大约30秒,则会引发超时.我的问题是如何通过NHibernate扩展LINQ语句的默认30秒超时?

我已经在这里,这里这里看过帖子,但前两个是指设置DataContext的Timeout属性,这里不适用,第三个是指用XML设置超时,这也不适用因为我正在使用流畅的NHibernate可以动态生成XML.不仅如此,这篇文章还有2年历史,而Fluent NHibernate自此改变了.

使用ICriteria对象甚至是HQL,我可以指定超时,但这不是目标.我想知道如何设置相同的超时并使用LINQ.

示例代码:

    using (var session = SessionFactory.OpenSession())
    using (var transaction = session.BeginTransaction())
    {
        var query = (from mem in session.Query<Member>()
                     select mem);
        query = query.Where({where statement});
        int start = (currentPage - 1) * max);
        if (start > 0)
            query = query.Skip(start).Take(max);
        else
            query = query.Take(max);

        var list = query.ToList();
        transaction.Commit();
        return list;
    }
Run Code Online (Sandbox Code Playgroud)

此代码(where语句无关紧要)适用于所有目的,除非发生超时.

任何帮助表示赞赏.提前致谢!

linq-to-nhibernate c#-4.0

13
推荐指数
2
解决办法
8461
查看次数

带有级联删除的NHibernate Has-Many集合失败

目标:
创建一个父子关系,以便修改父项的子项列表将传播给所有子项,并让NHibernate完成繁重的任务.父子关系将Has-Many在自引用表上.

问题:
任何删除父(根)对象的尝试都会导致异常,而不是删除子对象的预期行为.

我正在使用的东西的版本:
Microsoft SQL Server Management Studio版本10.0.4064.0
FluentNHibernate版本1.3
NHibernate版本3.2.0.4

下面是我用来复制此行为的当前类对象和表结构的集合.


// Entity
class Task
{
    ID { get; set; }    
    public virtual IList<Task> Children { get; set; }
    public virtual byte[] Version { get; protected set; }
    public virtual bool IsNew() { return ID <= 0; }

    public Task()
    {
        this.Children = new System.Collections.Generic.List<Task>();
    }
    // Other properties excluded for brevity
}
Run Code Online (Sandbox Code Playgroud)
// Map
class TaskMap : ClassMap<Task>
{
    TaskMap()
    {
        Table("Task");

        Id(x => x.ID, …
Run Code Online (Sandbox Code Playgroud)

c# nhibernate orm fluent-nhibernate nhibernate-cascade

8
推荐指数
1
解决办法
2016
查看次数