从数据库读取时的 nhibernate 会话问题

发布于 2024-10-09 21:37:43 字数 1991 浏览 2 评论 0原文

我使用 nhibernate 在数据库中提交一些数据。

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

但没有成功。我查看数据库,它就在那里,但我无法从数据库中读取它。我如何刷新会话或者我必须做什么才能在保存后读取这些新数据。问题仅出现在我使用 ajax 组件时。

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

timeSliceStartTime、timeSliceEndTime 和 newTimeSlices 是 od 类型 DateTime

Schedule 是 DB 对象类型(表 Schedules)

newScheduleDay 是 DB 对象类型(表 ScheduleDays)


我正在使用 C# + 流畅的 nhibernate 1.1

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

I commit some data in DB with nhibernate.

TimeSlices newTimeSlices = new TimeSlices(timeSliceStartTime, timeSliceEndTime, schedule, newScheduleDay);
                        tsDao.Save(newTimeSlices);
                        tsDao.CommitChanges();

but then i try to read this data

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

but without succeed. I look in DB and it is there but i can not read it from DB. How can i refresh session or what i must do that i can read this new data after i save it. Problem is only when i am working with ajax components.

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

timeSliceStartTime, timeSliceEndTime and newTimeSlices are type od DateTime

schedule is DB object type (Table Schedules)

newScheduleDay is DB object type (Table ScheduleDays)


I am using C# + fluent nhibernate 1.1

Can be problem with mapping and lazy load or asbag? Or what can be wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

荒岛晴空 2024-10-16 21:37:43

我不知道问题所在,但这是我调试它的方法:

  1. 检查它是否正确保存在数据库中。检查关系是否存在。
  2. 按照此处
  3. 检查您的查询生成的 SQL。尝试自己运行 SQL。
  4. 使用直觉更改映射或查询。
  5. 尝试以其他方式编写查询,例如使用 nHibernate.LINQ。

nHibernate 不会缓存查询,除非您告诉它。

I don't know the problem, but here is how I would debug it:

  1. Check that it is saved correctly in the database. Check that the relationships are there.
  2. Turn on SQL output as per here
  3. Check what SQL your query generates. Try running the SQL yourself.
  4. Change the mapping or query using intuition.
  5. Try writing the query in other ways, say using nHibernate.LINQ.

nHibernate does not cache queries unless you tell it to.

清风不识月 2024-10-16 21:37:43

嘿,你可以运行 nhibernate profiler 并查看正在触发什么查询吗?相同的链接是 nhprof.com

Google 看看如何使用 nhprof 它非常简单。
希望有帮助

Hey Can you run nhibernate profiler and see what query is getting fired. The link to the same is nhprof.com

Google to see how to use nhprof its very simple.
Hope that helps

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文