C# 从数据库读取时出现nhibernate会话问题

C# 从数据库读取时出现nhibernate会话问题,c#,nhibernate,fluent-nhibernate,C#,Nhibernate,Fluent Nhibernate,我用nhibernate在DB中提交了一些数据 TimeSlices newTimeSlices = new TimeSlices(timeSliceStartTime, timeSliceEndTime, schedule, newScheduleDay); tsDao.Save(newTimeSlices); tsDao.CommitChanges(); 但是我试着读这些数据 public Sc

我用nhibernate在DB中提交了一些数据

TimeSlices newTimeSlices = new TimeSlices(timeSliceStartTime, timeSliceEndTime, schedule, newScheduleDay);
                        tsDao.Save(newTimeSlices);
                        tsDao.CommitChanges();
但是我试着读这些数据

public ScheduleDays GetByDate(DateTime date, Schedules schedule)
        {
            NHibernateSession.Refresh(schedule);

            DateTime tmpDate = new DateTime(date.Year, date.Month, date.Day, 0, 0, 0);

            return NHibernateSession.CreateCriteria(typeof (ScheduleDays))
                .Add(Restrictions.Eq(ScheduleDaysProperties.Date.ToString(), tmpDate))
                .Add(Restrictions.Eq(ScheduleDaysProperties.Schedule.ToString(), schedule))
                .UniqueResult<ScheduleDays>();
        }
timeSliceStartTime、timeSliceEndTime和newTimeSlices的类型为od DateTime

明细表是DB对象类型(表明细表)

newScheduleDay是DB对象类型(表ScheduleDays)


我正在使用C#+fluent nhibernate 1.1


映射和延迟加载或asbag可能有问题吗?或者可能有什么问题?

我不知道问题出在哪里,但下面是我调试它的方法:

  • 检查它是否正确保存在数据库中。检查关系是否存在
  • 根据打开SQL输出
  • 检查查询生成的SQL。尝试自己运行SQL
  • 使用直觉更改映射或查询
  • 尝试用其他方式编写查询,比如使用nHibernate.LINQ

  • nHibernate不会缓存查询,除非。

    我不知道问题出在哪里,但下面是我调试它的方法:

  • 检查它是否正确保存在数据库中。检查关系是否存在
  • 根据打开SQL输出
  • 检查查询生成的SQL。尝试自己运行SQL
  • 使用直觉更改映射或查询
  • 尝试用其他方式编写查询,比如使用nHibernate.LINQ

  • nHibernate不会缓存查询,除非。

    您可以运行nHibernate探查器并查看触发的查询。同样的链接是nhprof.com

    谷歌看看如何使用nhprof它很简单。
    希望这对您有所帮助,您可以运行nhibernate profiler并查看触发了什么查询。同样的链接是nhprof.com

    谷歌看看如何使用nhprof它很简单。
    希望这对优秀的调试步骤有所帮助。我发现第2步和第3步总是非常有用,以至于在开发过程中,我在所有项目上都默认使用SQL登录。@Ragesh-哇,小心,如果你将二进制blob推送到数据库中,它实际上会对完整的二进制进行十六进制编码和记录payload@fostandy,这是一个很好的观点。就个人而言,我从来没有遇到过这个问题,因为我非常努力地让blob远离DB。当然,我只在开发过程中打开日志记录。+1表示出色的调试步骤。我发现第2步和第3步总是非常有用,以至于在开发过程中,我在所有项目上都默认使用SQL登录。@Ragesh-哇,小心,如果你将二进制blob推送到数据库中,它实际上会对完整的二进制进行十六进制编码和记录payload@fostandy,这是一个很好的观点。就个人而言,我从来没有遇到过这个问题,因为我非常努力地让blob远离DB。当然,我只在开发期间打开日志记录。
    public ScheduleDaysMap()
            {
                Id(x => x.ScheduleDayId);
    
                Map(x => x.Date)
                    .Not.Nullable();
    
                Map(x => x.MinutesOrderInterval)
                    .Not.Nullable();
    
                References(x => x.Schedule)
                    .Column(TableNames.ScheduleId)
                    .Not.Nullable()
                    .LazyLoad();
    
                HasMany(x => x.Orders)
                    .KeyColumn(TableNames.ScheduleDayId)
                    .Inverse()
                    .LazyLoad()
                    .AsBag();
    
                HasMany(x => x.TimeSlices)
                    .KeyColumn(TableNames.ScheduleDayId)
                    .Inverse()
                    .LazyLoad()
                    .AsBag();
    
                Version(x => x.Timestamp);
            }