Tag: nhibernate

是一对一的关系糟糕的策略

用户总是有一个钱包。 一个钱包总是属于一个用户。 由于我想分离与钱包相关的属性,我创建了Wallet对象并能够跟踪货币交易,…我创建了 public Wallet : Entity { public double Amont {get; set;} public IList Transactions {get; set;} } 因为这显然是一对一的关系,所以可以使用一对一关系进行映射吗? 一对一的坏策略是什么?

NHibernate:选择带有元素包中条目的项目

我有一个列表属性的类。 public class Paperboy{ private int _id; private string _lastname; private string _firstname; private string _mobile; private string _phone; private IList _additionalPhoneNumbers; } 列表被映射为带有键和元素的包。 现在我尝试通过电话号码(_phone,_mobile或_additionalPhoneNumbers)选择paberboys。 _phone和_mobile没有问题,但我坚持使用额外的数字。 我尝试了标准api和查询。 Criteria Api不知道属性AdditionalPhoneNumbers ICriteria criteria = session.CreateCriteria(typeof(Paperboy)); criteria.CreateAlias(“_additionalPhoneNumbers”, “AdditionalPhoneNumbers”); Disjunction or = Restrictions.Disjunction(); or.Add(Restrictions.Eq(“_phone”, number)); or.Add(Restrictions.Eq(“_mobile”, number)); or.Add(Restrictions.Eq(“AdditionalPhoneNumbers”, number)); criteria.Add(or); criteria.SetMaxResults(1); return criteria.UniqueResult(); 查询结束不知道包含: return query.Where(p => p.Mobile == […]

在NHibernate中查询未映射的列

我有一个使用NHibernate映射到表的类。 问题是只有部分属性映射到表中的列。 这很好,因为我们用于显示的唯一列是映射的,但我想知道是否有任何方法可以查询表中未映射到我的类中的属性的其他列。 例如,我们有一个包含以下列的表: Customer ———– CustomerId Name DateCreated 我们有一个对象 public class Customer { public virtual int CustomerId {get;set;} public virtual string name {get;set;} } 并且name和customerId被映射,但DateCreated不是因为我们从不在任何地方显示它。 我们想在Customer表中查询由特定日期创建的客户。 如果没有映射DateCreated有没有办法做到这一点? 此外,最好使用条件API执行此操作。

在NHibernate的queryover中使用OR Clause

我正在使用Nhibernate。 我正在通过queryover方法编写查询。 我能够编写和编写如下面的代码。 它的工作正常。 db.QueryOver(Of Users)() .Where(Function(x) x.Role = “Guest”) .And(Function(x) x.Block = 0) .And(Function(x) x.APPID = appId) .List(); 但我想使用Or子句代替And ,或两者的组合。 我该如何实现呢。 谢谢

Nhibernate – 更新单个字段而不加载实体?

我有一个用例,用户可以获得产品列表,并可以选择多个产品并激活或停用它们。 这个列表的模型是不可变的,我有一个存储库,它取一个应该停用它们的模型列表。 我确实有另一个完整的产品编辑模型,但我不需要加载数百个只需更改一列。 我正在使用Session.CreateQuery,但有没有更好的方法来实现这个?

Microsoft Sync Framework与Nhibernate TooManyRowsAffectedexception冲突

我们正在尝试将Microsoft Sync Framework实现到我们的应用程序中,该应用程序使用NHibernate持久化它的域。 我们遇到的一个问题是,在Sync Framework更改了您的初始数据库结构(添加影子表和触发器)之后,当您尝试将对象插入数据库时​​,NHibernate似乎会因为抛出一个toomanyrowsaffectedexception而感到不安。 我发现这篇文章的解决方案是在每个更新语句周围添加SET NOCOUNT ON和OFF,但由于表结构由nhibernate自动生成,同步触发器由Sync Framework自动生成,因此手动调整所有触发器实际上不是一个选项。 NHibernate and TooManyRowsAffectedException 我尝试按照此问题中的描述设置sql server 2008属性NOCOUNT: 哪里是设置NOCOUNT的最佳位置? 但是这导致了StaleStateException(受影响的行数为-1,预期为1)。 您是否知道是否有办法配置同步框架以在其触发器中自动设置这些NOCOUNT语句? 或者有没有办法告诉NHibernate期望更多/更少的行被更改? 或者也许你们中的任何人都有一个自动脚本来将这些NOCOUNT语句添加到同步框架的触发器中。 Thx提前!

针对后台工作者的Web应用程序的Nhibernate会话管理策略?

对于Web应用程序,处理会话的好方法似乎是使用设置managed_web ,在Begin / EndRequest上调用CurrentSessionContext.Bind/Unbind 。 然后我可以在存储库类中使用sessionFactory.GetCurrentSession() 。 这适用于所有页面请求。 但是我有后台工作人员做东西并使用相同的存储库类来做事情。 这些不在Web请求中运行,因此会话处理将不起作用。 有关如何解决这个问题的任何建议?

引用类时的NHibernate映射问题(延迟加载问题?)

我正在使用NHibernate + Fluent来处理我的数据库,我在查询引用其他数据的数据时遇到了问题。 我的简单问题是:我是否需要在映射中定义一些“BelongsTo”等,或者只在一侧定义引用就足够了(参见下面的映射示例)? 如果是这样 – 怎么样? 如果没有请继续阅读..看看这个简化的例子 – 从两个模型类开始: public class Foo { private IList _bars = new List(); public int Id { get; set; } public string Name { get; set; } public IList Bars { get { return _bars; } set { _bars = value; } } } public class Bar { […]

nhibernate审核更新事件

以下代码适用于插入,但更新modifier永远不会设置,任何想法为什么? 正在运行预更新代码,并将状态和实体值正确设置为所需的值。 但是在查看生成的sql时,nhibernate不包含更新查询中的字段。 /// Updates auditable objects public class AuditEventListener : IPreInsertEventListener, IPreUpdateEventListener { private ISecurityManager securityManager; public bool OnPreInsert( PreInsertEvent args ) { var auditable = args.Entity as IAuditable; if (auditable != null) { Set( x => auditable.Creator, args.Persister, auditable, args.State, SecurityManager.Identity ); Set( x => auditable.DateAdded, args.Persister, auditable, args.State, Clock.Now ); } return […]

NHibernate / MySQL字符串连接

我有一个看起来像这样的nhibernate linq查询: from b in session.Query() where b.Uri.Equals(uri) || b.Uri.Equals(“www.” + uri) || string.Concat(“www.”, b.Uri).Equals(uri) select b 这个爆炸,说康卡特不支持,但当我改变它 from b in session.Query() where b.Uri.Equals(uri) || b.Uri.Equals(“www.” + uri) || (“www.” + b.Uri).Equals(uri) select b 它运行正常,但查询如下所示: select cast(count(*) as SIGNED) as col_0_0_ from bookmarks bookmark0_ where bookmark0_.Uri = ‘www.google.com’ or bookmark0_.Uri = ‘www.www.google.com’ or ‘www.’+bookmark0_.Uri = […]