Tag: hibernate

实体 – >界面关系,如何映射

我正在尝试开发一些基本的网络应用程序。 我将仅用两个实体Article和Image发布问题。 一篇文章有​​很多图像,一个或多个图像只属于一篇文章。 每篇文章都实现了接口IArticle和抽象类ArticleBase。 ArticleBase仅定义每篇文章的公共属性,但子文章除了ArticleBase中定义的属性外,可以具有更多属性。 所以我有( IArticle , ArticleBase , IArticle , ArticleBase ) public abstract class ArticleBase : Entity, IArticle { … public string Name { get; set; } public DateTime Created { get; set; } } public class ArticleComputer : ArticleBase { public virtual IList Images {get; set;} public virtual OSTypeEnum OS {get; […]

使用无状态会话延迟查找字典值

在我的应用程序中,我设置了一个三元字典映射,以便对于给定的用户,我可以为属于该用户的对象的每个实例检索“设置”。 也就是说,我有类似的东西: public class User { public virtual IDictionary BazSettings { get; set; } //… 所以每当我有一个Baz对象时,我都可以通过currentUser.BazSettings[baz]查找当前用户的baz设置。 我希望能够使用无状态会话来执行此操作,但是我使用以下代码获得了LazyInitializationException : //int bazId; using (IStatelessSession session = Global.SessionFactory.OpenStatelessSession()) { var currentUser = session.Get(Membership.GetUser().ProviderUserKey); var baz = session.Get(bazId); var bazSettings = currentUser.BazSettings[baz]; // raises `LazyInitializationException` 当我使用ISession ,问题就会消失。 完整的NHibernate错误消息包括文本“没有会话或会话已关闭”。 这是有道理的,因为在使用无状态会话时,实体未连接到会话。 但是,我认为有一种方法可以使用无状态会话来执行此查找。 如何使用无状态会话执行查找currentUser.BazSettings[baz] ?

为什么NHibernate抛出“StaleObjectStateException”?

我正在编写项目并使用NHibernate 3.1 SimpleTest的: Forum forum = Session.CreateCriteria().Add(Restrictions.Eq(“UrlName”, “reportabug”)).UniqueResult(); forum.TopicsCount++; IForumRepository forumRepository = new ForumRepository(SessionFactory); forumRepository.Update(forum); public virtual void Update(TEntity entity) { if (!session.Transaction.IsActive) { TResult result; using (var tx = session.BeginTransaction()) { session.SaveOrUpdate(entity) tx.Commit(); } return result; } session.SaveOrUpdate(entity) } 上次更新抛出exception: StaleObjectStateException was unhandled by user code: Row was updated or deleted by another transaction […]

无法删除集合:

我有两个表,tableA和tableB。 tableA有列:tabAId,col2,col3 (tabAId primaryKey和Identity列。) tableB有列:tabAId,name (tabAId不为null) 我在tableA的hbm文件中创建了Bag,以维护关系。 当我尝试更新tableA中的记录时,它抛出exception,因为我在tableA实例中有子列表。 [NHibernate.Exceptions.GenericADOException] = {“无法删除集合:[MIHR.Entities.tableA.tableB#21] [SQL:UPDATE dbo.tableB SET tabAId = null WHERE tabAId = @ p0]”} InnerException = {“无法将值NULL插入列’tabAId’,表’SA_MIHR_DEV.dbo.tableB’;列不允许空值.UPDATE失败。\ r \ n语句已终止。”}

如何使用Nhibernate删除多个数据库实体?

这个问题的最佳做法是什么? 内置任何批处理function吗? 示例代码: using (ITransaction transaction = _session.BeginTransaction()) { _session.Delete(“FROM myObject o WHERE o.Id = IN(1,2,…99999)”); transaction.Commit(); } 提前致谢。

NHibernate – 如何审计实体的所有字段?

我正在使用NHibernate并寻找一种解决方案,允许我审核实体中所有字段的更改。 我希望能够为每个实体创建一个历史表,即Users – > UsersHistory,它将具有与Users表相同的结构,以及其他字段,如操作类型(更新,删除),进行更改的用户的用户ID等。我不想为每个实体定义这样的类。 我正在寻找像History (即History )之类的东西,因为这些条目不属于我的域,只会用于准备对实体所做的更改列表。 我还认为在代码中创建对这些表的插入更好,而不是创建sql触发器。 基本上,我只需要在更新或删除时在历史表中创建记录副本,我希望NHibernate生成插入。 我还需要从历史表中读取记录 – 正如我所说,这些表将包含实体字段和一些常见的历史字段。 我找不到有关如何创建此类解决方案的指导。 我所能找到的只是添加UserModified,UpdatedTimestamp等,如果我已经在实体上有这样的字段。 但是,我需要实体的完整历史记录,而不仅仅是最后更改条目的信息。 在此先感谢您的帮助。

Hibernate查询中的Unicode字符串

在SQL中,可以编写一个查询人员姓名的查询,如下所示: SELECT * FROM Person P WHERE P.Name LIKE N’%ike%’ 此查询将使用unicode字符运行(假设Name列和数据库已设置为处理unicode支持)。 我在HQL中有一个类似的查询,它由Hibernate(NHibernate)运行。 生成的查询如下所示: SELECT P FROM SumTotal.TP.Models.Party.Person P join P.Demographics PD WHERE (PD.LastName LIKE ‘%カタカ%’ ) 不幸的是,在HQL中的文字前面放置一个“N”会导致错误。 我已经尝试转义字符串中的unicode字符,但仍然没有成功。 数据库正在接受并保存来自Hibernate的unicode字符。 我已经能够使用unicode字符串成功填充对象,使用Hibernate保存它,并在数据库中validation它。 在我看来,我不能在自定义查询中使用unicode字符串(或者我也假设命名查询)。 这是Hibernate(Nhibernate)的已知问题或限制吗? 你如何在HQL中使用unicode? 有几个网站建议使用Criteria查询。 由于我正在使用的框架中的限制,这是不可能的。

睡在一个混合的C#线程中

在这篇关于C#中线程的网络教程中,Joseph Albahari写道:“不要在汇集的线程中睡觉!” 你为什么不这样做? 它对性能的影响有多严重? (这不是我想要做的;我只是好奇。)

C#让pc睡眠或hibernate

我想将我的系统置于睡眠或hibernate状态,两种不同的选择。 我如何使用API​​执行此操作,我真的不想使用Process,这不允许我选择我想要的操作方法。