Tag: linq to nhibernate

Bidi关联和NHibernate映射

我有BidiParent和BidiChildList类,它们以双向父子关系链接父母和孩子。 如果通过例如服务层更新孩子的父母,则新旧父母的孩子列表会自动更新以反映更改。 同样,如果通过例如添加新孩子来更新父母的子女列表,则子女的父母将自动更改为旧父母的子女列表。 我想尝试建立一个“智能”域模型。 显然,第一个问题是:这是一个好主意吗? 第二个问题是:是否有可能告诉NHibernate访问和修改字段 _Children或_Parent,但是要考虑属性 Children或Parent是否与字段完全同义? NHibernate应该加载并保存内部字段,但HQL或LINQ查询应该使用公共属性? public class BidiParent { … } public class BidiChildList : IList { … } public class Parent { public string Name { get; set; } public IList Children { get { return ChildrenBidi; } set { ChildrenBidi.Set(value); } } private BidiChildList ChildrenBidi { get { return […]

同一个NHibernate Linq查询中的Cacheable(),FetchMany()和ToFuture()

遇到类似于以下示例的情况: 1个父实体具有2个子集合的Employee : Addresses和Phones 我需要在single roundtrip检索所有员工的初始化地址和电话,并使用Cacheable()缓存在二级缓存中实现cache the query 。 使用: var baseQuery = session .Query() .Cacheable(); baseQuery .FetchMany(e => e.Addresses) .ToFuture(); var list = baseQuery .FetchMany(e => e.Phones) .ToFuture() .ToList(); 应该工作,但我得到以下例外: NHibernate.PropertyAccessException 信息: Exception occurred getter of NHibernateTest.Objects.Entity`1[[System.Int32, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]].Id 堆栈跟踪: at NHibernate.Properties.BasicPropertyAccessor.BasicGetter.Get(Object target) in p:\nhibernate-core\src\NHibernate\Properties\BasicPropertyAccessor.cs:line 213 at NHibernate.Tuple.Entity.AbstractEntityTuplizer.GetIdentifier(Object entity) in p:\nhibernate-core\src\NHibernate\Tuple\Entity\AbstractEntityTuplizer.cs:line 139 […]

为什么评估布尔表达式的普通定律不适合LINQ?

在这样的代码中: if (insuranceNumberSearch == null ? true : ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim())) doSomething(); 其中insuranceNumberSearch为null,其余表达式在以下代码中不为null: var q = from ei in session.Linq() where insuranceNumberSearch == null ? true : ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim()) select ei; 无论insuranceNumberSearch是null还是非null,都会评估表达式的所有部分。 我正在使用LINQ到NHibernate 更新: 不幸的是我把第一个片段弄错了。 正确的是: if (insuranceNumberSearch == null || (insuranceNumberSearch != null && ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim())) doSomething(); 要么 bool b1 = insuranceNumberSearch == null ? true : ei.InsuranceNumber.Contains(insuranceNumberSearch.Trim()); […]

‘string’不包含’Contains’的定义

我有这样的声明: var vals = from StandAloneUserPayment saup in _Session.Query() .Fetch(x => x.RecurringPayments) where saup.User.UserId == userId && searchString.Contains(saup.FriendlyName, StringComparer.InvariantCultureIgnoreCase) select saup; 这似乎正是我应该做的,但我得到了Contains以下消息的Contains方法的整行: string不包含Contains的定义和最佳扩展方法重载System.Linq.ParallelEnumerable.Contains(System.Linq.ParallelQuery, TSource, System.Collections.Generic.IEqualityComparer)有一些无效参数 我究竟做错了什么?

渴望在NHibernate中加载儿童和儿童collections品

我有一个NHibernate试图加载一个小的数据层次的问题。 我的域名模型如下: class GrandParent { int ID{get;set;} IList Parents {get; set;} } class Parent { IList Children {get; set;} } class Child { } 而且我想为所有父母和孩子加载一份特定的GrandParent。 此Linq-to-NH查询创建正确的SQL并按预期加载GrandParent :(该示例假定祖父母有2个父母,每个父母有2个子对象 – 总共4个子对象)。 var linq = session.Linq(); linq.Expand(“Parents”); linq.Expand(“Parents.Children”); linq.QueryOptions.RegisterCustomAction(c => c.SetResultTransformer(new DistinctRootEntityResultTransformer())); var grandparent = (select g from session.Linq() where g.ID == 1 select g).ToList(); Assert(grandparent.Count == 1); […]

Nhibernate.Linq:用Where(Expression <Predicate >)限制查询结果

我使用NHibernate查询我的数据库。 现在我需要使用谓词限制所选数据。 到目前为止,我发现(Google驱动开发的最佳状态)使用Expressions和NHibernate.Linq可以实现这样的function。 这是我尝试过的: public IList GetAll(Predicate predicate) { Expression<Func> restriction = x => predicate(x); ISession session = SessionService.GetSession(); IList bestellungen = session.Query() .Where(restriction).ToList(); return bestellungen; } 这导致无法将类型为’NHibernate.Hql.Ast.HqlCast’的对象转换为’NHibernate.Hql.Ast.HqlBooleanExpression’ 。 只需快速检查它的位置:将方法体的第一行更改为 Expression<Func> restriction = x => x.Id!=1; 令人惊叹的结果是一切正常。 如何在表达式中执行我的Predicate?

NHibernate Linq和DistinctRootEntity

当我执行以下查询时,我得到一个exception,告诉我’feedItemQuery’包含多个项目(因此SingleOrDefault不起作用)。 当使用Criteria api而不使用DistinctRootEntity转换器时,这是预期的行为,但是当使用linq时,我希望得到一个单一的根实体(FeedItem,其属性Ads(of ICollection)包含所有广告)。 有没有办法告诉NHibernate.Linq使用DistinctRootEntity转换器? 我的查询: var feedItemQuery = from ad in session.Linq().Expand(“Ads”) where ad.Id == Id select ad; var feedItem = feedItemQuery.SingleOrDefault(); // This fails !? 映射: … 提前致谢

使用QueryOver时,Nhibernate无法解析属性exception,适用于QueryAll

我有以下问题 基本上我有以下两个片段: var contactAssociation = session.QueryOver(() => contactAssociationAlias) .Where(() => contactAssociationAlias.Contact.ID == careGiverId && contactAssociationAlias.Client.ID == clientKey) .Where(() => contactAssociationAlias.AclRole.RoleName == “Care Giver”) .SingleOrDefault(); 和 var contactAssociation = session.Query() .Where(cr => cr.Contact.ID == careGiverId && cr.Client.ID == clientKey) .Where(cr => cr.AclRole.RoleName == “Care Giver”) .SingleOrDefault(); 第二个工作第一个输出此错误: Message=could not resolve property: AclRole.RoleCode of: SL.STAdmin.DAL.ContactAssociation 有人知道为什么吗? 先感谢您

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 = […]

C#中延迟执行和延迟评估之间的差异

能不能让我知道C#中延迟执行和延迟评估之间的确切差异是什么?这两个是同义词使用的。可以用一个例子解释一下这个区别吗?