Tag: nhibernate

NHibernate 4升级 – 无法同时获取多个行李

我尝试将NH 3.3.1.4000升级到最新版本的NH 4.0.2.4000,我遇到了FetchMany和ThenFetchMany的问题。 在这篇文章中,我了解到这个旧function不再有效, 通过NHibernate 4升级破坏了变化 。 在新的NH版本上进行这种获取的正确方法是什么? 代码示例: var IdsList = new List { /* Some Ids */ }; session.Query() .FetchMany(x=>x.B_ObjectsList) .ThanFetchMany(x=>x.C_ObjectsList) .Where(x=>IdsList.Contains(x=>x.Id)) .ToList(); 类别: Public Class A { public int Id {get;set;} public IList B_ObjectsList{get;set;} } Public Class B { public int Id {get;set;} public IList C_ObjectsList {get;set;} } Public Class C { […]

NHibernate问题与指定的字符串ID和不同的案例字符

我在NHibernate上保存一个带有指定字符串Id的实体时遇到问题……我试着用一个例子来解释这个问题。 好吧,如果我执行这些语句,假设在ID为“AAA”的数据库上有一个实体 ENTITYTYPE entity = Session.Get(“AAA”); ENTITYTYPE newentity = new ENTITYTYPE() { Id = “aaa” }; Session.Delete(entity); Session.Save(newentity); Session.Flush(); 在Flush上,NHibernate使用以下消息引发exception:“无法使数据库状态与会话同步”/“违反PRIMARY KEY” 它似乎与Case Sensitive ID有问题,如果我在“newentity”的Id上使用“AAA”然后它可以工作,但在我的情况下并不那么容易,我要找到另一种解决方案。 如何避免这种exception? 你能帮助我吗?

使用nHibernate序列化DetachedCriteria

我正在尝试序列化DetachedCriteria,以便我可以将其保存在数据库中,并在以后重用相同的标准。 当我运行下面的代码时,我得到“NHibernate.Criterion.DetachedCriteria无法序列化,因为它没有无参数构造函数”。 DetachedCriteria criteria1 = DetachedCriteria.For(“so”) .Add(Expression.Eq(“ObjectCode”, “1234”)); XmlSerializer s = new XmlSerializer(typeof(DetachedCriteria)); TextWriter writer = new StringWriter(); s.Serialize(writer, criteria1); writer.Close(); 有没有什么好方法可以序列化DetachedCriteria?

在运行时扩展/修改NHibernate类

抱歉,如果已经有一个点答案,但我还没有找到答案。 我正在使用NH3,我有一个用例,我想在任何实体上添加一个Set,它实现了一个特定的接口。 我有一个配置构建器类,所以我可以在创建会话工厂之前进行这些更改。 鉴于这个减少的例子: public class Person : IHasExtraItems { public Person() { this.ExtraItems = new HashSet(); } public virtual Guid Id { get; set; } public virtual string Name { get; set; } public virtual DateTime Birthdate { get; set; } public virtual ICollection ExtraItems { get; protected set; } } public class ExtraItem […]

安装的默认数据

将默认数据添加到SchemaExport是否合适。 如果不是最好的方法呢? 我想有一个* .sql文件,其中包含“表格”和“默认数据”的创建脚本,还是有更好的方法?

NHibernate,代理和平等

我正在使用NHibernate 3.3.1并发现了非常有趣的问题。 在我的域模型中,我定义了两个类:Carriage和CarriageRequest,互相引用。 因为延迟加载是打开的,所以当我访问carriage.CarriageRequest时 – 它指向一个代理对象。 好的,可以。 但是当我调用CarriageRequest类中定义的任何方法时,“this”引用第三个对象实例。 例: class CarriageRequest { public virtual void Test(CarriageRequest instance) { Debug.WriteLine(Object.ReferenceEquals(this, instance)); // prints FALSE } } class Carriage { public virtual CarriageRequest CarriageRequest { get; set; } } … var carriage = session.Get(123); carriage.CarriageRequest.Test(carriage.CarriageRequest); 所以它看起来像NHibernate代理包装原始对象并将所有方法调用转发给包装对象。 在这种情况下如何使用“==”? 我需要做这样的事情: var shipment = (from sh in Carriage.Shipments where sh.CarriageRequest […]

NHibernate在自动刷新事件上表现不佳?

首先我要说的是,我知道NH不建议使用批量操作。 但有点兴趣,我想知道为什么这么贵。 对于我系统中的200个对象,需要4分钟,其中90%以上的时间花在DefaultAutoFlushEventListener.OnAutoFlush上(感谢RedGate Profiler)。 那太疯狂了。 我想知道是否有人编写了一个自定义的DefaultAutoFlushEventListener,它可以暂时解决这个大型重复更新的问题。 更新:实际上不是批量更新的问题,而是事务和FlushMode查询的问题。 但是,当它冲洗时,NH到底在做什么呢?

NHibernate QueryOver – 检索全部,并标记已经“选中”的那些

亲爱的NHibernate专家, 以下查询为我提供了所有类别: var result = Session.QueryOver(() => cat).List(); ..并通过运行此查询,我得到了所选的(category_x_product表): int productId = 11; Category cat = null; CategoryProduct cp = null; var subQuery = QueryOver.Of(() => cp) .Where(() => cp.ProductId == productId) .Select(Projections.Distinct(Projections.Property(() => cp.CategoryId))); result = Session.QueryOver(() => cat) .WithSubquery .WhereProperty(() => cat.Id).In(subQuery) .List(); 任何组合这两个查询的方法,以便我得到所有带有布尔值的类别,指示在CategoryProduct-query中实际上“选择”了哪一个。 将它映射到这样的实体,也许吧? CategorySelected —————- Category Category { get; set; } […]

使用NHibernate中的无状态会话初始化关联的实体或集合失败

我正在尝试与第三方dll中的实体建立关联。 出于某些原因,我必须使用StatelessSession 。 使用StatefullSession它可以工作,但不能使用Stateless。 我的想法是允许第三方添加一个表,并在查询主表时获取其数据。 我有三个项目:我的主项目,带有IExtender接口的模型项目,带有Extender类的第三方项目(未被主项目引用)。 我的数据架构: Table Data Id INT identity, more fields… Table Extender Id INT PK, FK from Data Name NVARCHAR more fields… 型号项目代码: public interface IExtender { int Id { get; set; } } 主要项目代码: public class Data { public virtual int Id { get; set; } public IExtender Extender { […]

NHibernate.Exceptions.GenericADOException:无法执行查询

我有一个遗留应用程序(vfp 8),我需要从中提取数据(无插入)。 我使用Accnum字段作为主键,它在表中定义为字符11。 工厂配置: NHibernate.Connection.DriverConnectionProvider NHibernate.Dialect.GenericDialect NHibernate.Driver.OleDbDriver Provider=VFPOLEDB.1;Data Source=C:\Analysis\Quantium\development\RD warehouse\_RDAUWH\Data;Collating Sequence=MACHINE false 这是我的映射文件: class级: public class CustMast { private string _accnum; public virtual string Accnum { get { return _accnum; } set { _accnum = value; } } private string _fullname; public virtual string Fullname { get { return _fullname; } set { _fullname = […]