小编use*_*952的帖子

使用 NHibernate 保存和加载 Utc DateTime

我在将 DateTime 保存到 SQL Lite 数据库时遇到问题。(也许也适用于 MS SQL)

我想用 NHibernate 将 UTC 时间的 DateTime 保存到数据库并从数据库中加载它。我们使用UTC时间在hole应用程序中工作,当我们在ui上显示时间时,我们将其更改为当地时间。

我阅读了很多关于 DateTime 和 NHibernate 的内容:

但没有任何作用。一些例子:

PreUpdate:在保存实体之前。

Saved : 是用 nhibernate (repo.save(o);) 保存后保存的对象。

Loaded:当我通过 id 从存储库加载实体时。

// The next 3 examples are with:
o.Created = DateTime.UtcNow;
Run Code Online (Sandbox Code Playgroud)

映射类型: CustomType<TimestampType>()

UtcTime: 16:44... LocalTime: 18:44

  • 更新前:2015-03-30T16:44:35.7636679Z 勾选:635633306757636679 种类:UTC
  • 保存时间:2015-03-30T16:44:35.7636679Z 勾选:635633306757636679 种类:UTC
  • 已加载:2015-03-30T18:44:35.7636679 勾选:635633378757636679 种类:未指定

这里的问题是,当我通过 id 重新加载对象时,新对象的时间是 18...(+2h)而不是 16.... 并且 DateTime 类型是未指定的。

映射类型: CustomType<DateTimeType>() …

c# nhibernate datetime utc

5
推荐指数
1
解决办法
4764
查看次数

NHibernate 警告正在缩小代理范围 - 此操作会中断 ==

我有一个关于 NHibernate 代理的问题。我的日志文件中有很多日志,例如:将代理缩小到 - 此操作中断==网上还有一些其他问题和不同的答案:

Stackoverflow NHibernate 缩小代理警告 这是否是一件大事取决于您愿意接受的风险程度。由于代码和数据库之间始终存在脱节,因此您无法始终确保转换能够正常工作。这将导致可能难以诊断的错误,并且如果不更改数据库或代码就可能无法解决。

hibernate 的另一篇文章:

缩小问题范围 不要担心他的警告,只需将以下内容放入您的日志文件中,您就不会再看到它了......

为什么会发生这种情况?假设您有一个与地址具有多对一关联的产品。两者都是实体,并且 Address 有一个 ShippingAddress 子类。

让我们从数据库中 Session.get(..) 获取一个以 ShippingAddress 作为关联的产品。因为多对一是惰性的,所以它会返回一个Address代理。请注意,这是一个地址代理,而不是一个 ShippingAddress 代理,因为代理将始终与产品中提到的类型匹配(有关详细信息,请参阅 hibernate 书籍)。

该代理由 Hibernate 存储在其代理缓存中。现在,我们从数据库中 Session.get(...) 获取相同的 ShippingAddress,该地址与我们使用的从数据库中获取的产品相关联。现在 Hibernate 将发现它已经包含此 ShippingAddress 的代理并将返回它。但是,它会注意到类型不相同,因此必须进行“向下转型”。因为后一个操作对于“代理”来说是不可能的,所以它将创建新的操作并返回它......

正如你所看到的,没什么好担心的。 您可以考虑将地址设置为值类型...在我的情况下,这是没有选择的。

还有最后一张

Hibernate 4 中删除了 ProxyWarnLog?

以下是 NHibernate 的代码:StatefulPersistenceContext.cs -> NarrowProxy(..)

那么,到底有没有问题呢?我总是在程序中使用分离的对象。我希望有一个人可以帮助我。多谢。

c# nhibernate proxy logging warnings

5
推荐指数
1
解决办法
9526
查看次数

标签 统计

c# ×2

nhibernate ×2

datetime ×1

logging ×1

proxy ×1

utc ×1

warnings ×1