问题标签 [fluent-nhibernate]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
835 浏览

c# - 您如何映射也是 NHibernate hbm xml(或 fluent-nhibernate 类映射)中的主键的组件?

我试图弄清楚如何将组件映射为 nhibernate 中的主键,如果可能的话,也可以在流利的 nhibernate 中映射。

有问题的组件是一组独特的 3d 坐标,这是对象:

SpaceCoordinate 是一个结构体,定义如下:

在流利的 nhibernate 中使 SpaceCoordinate 成为一个组件,我将创建一个像这样的映射类:

但我想知道的是如何使 SpaceCoordinate 组件作为一个整体成为具有唯一约束的主键。我将如何在 Nhibernate xml 或流利的 nhibernate 类映射中映射它?

0 投票
2 回答
9524 浏览

fluent-nhibernate - 如何在流利的 nhibernate 中将枚举映射为字符串?

是否可以使用 Fluent Nhibernate 将枚举映射为字符串?

0 投票
1 回答
7719 浏览

asp.net - Fluent Nhibernate 在 3 个表上映射内部联接

数据结构为:

  • Table[Questionnaire] 顶部节点
  • Table[QuestionGroup] 只是标题等的分组
  • 表[QuestionnaireQuestion]映射[Question]<->[QuestionGroup]的多对多关系和[Questionnaire]<->[Question]的多对多关系
  • 表[问题]

出于报告目的,一个问题可以存在于许多问卷/问题组中。QuestionnaireQuestion 表还包含 Question 的一些属性,这些属性可能因调查问卷而异,例如是否需要?验证等。我想不通的是如何映射 Question.Required?。该属性是唯一的,过滤时对问卷调查问卷的问题表中的问卷_id 和问题_id

当我加载问卷时,我提供了一个问卷 ID,然后给我一个 QuestionGroups 列表,每个组都包含一个问题列表(尽管缺少验证属性)。

到目前为止,我的映射是:

0 投票
2 回答
5006 浏览

fluent-nhibernate - 与nhibernate的映射对象化关系无法初始化集合

我正在按照指南映射一个对象化的关系(many->many 映射表包含属性)。

生成的 SQL(见异常)正在工作并返回我想要的(严格来说它应该是一个内部连接?)。但我得到一个GenericADOException说法:

无法初始化集合:[Questionnaires.Core.Questionnaire.Questions#CBDEDAFC183B4CD7AF1422423A91F589] [SQL:SELECT questions0_.ida_questionnaire_id为ida4_2_,questions0_.ida_questionnaire_question_id为ida1_2_,questions0_.ida_questionnaire_question_id为ida1_5_1_,questions0_.question_no为question2_5_1_,questions0_.ida_question_id为ida3_5_1_ ,questions0_.ida_questionnaire_id如ida4_5_1_,question1_.ida_question_id如ida1_3_0_,question1_.ida_question_type_id如ida2_3_0_,question1_.description如descript3_3_0_,question1_.validate_max如validate4_3_0_,question1_.validate_min如validate5_3_0_ FROM ida_questionnaire_question questions0_左外连接ida_question question1_上questions0_.ida_question_id = question1_ .ida_question_id WHERE questions0_.ida_questionnaire_id=?]

我猜这是因为Questionnaire它真的映射到QuestionnaireQuestionQuestionQuestionnaire-> hasMany-> QuestionnaireQuestion<- hasMany<- Question)。但我似乎无法找到解决这个问题的方法。

问题:

问卷问题:

问卷:


在数据库中的异常中运行 SQL 的结果是 6 行(预期数量),其中包含:

  • IDA4_2_:指南
  • IDA1_2_:指南
  • IDA1_5_1_:指南
  • QUESTION2_5_1:编号(订单属性)
  • IDA3_5_1_:指南
  • IDA4_5_1:指南
  • IDA1_3_0_:指南
  • IDA2_3_0_:手机(类型属性)
  • DESCRIPT3_3_0_:mobiletelefon(描述属性)
  • VALIDATE4_3_0_:(RangeMin 属性)
  • VALIDATE5_3_0_:(RangeMax 属性)

完整的例外是:

[InvalidCastException:不能使用对象类型 Questionnaires.Core.QuestionnaireQuestion 作为 Questionnaires.Core.Question。] NHibernate.Collection.Generic.PersistentGenericBag`1.ReadFrom(IDataReader 阅读器,ICollectionPersister 持久化器,ICollectionAliases 描述符,对象所有者)+160 NHibernate.Loader。 Loader.ReadCollectionElement(对象 optionalOwner,对象 optionalKey,ICollectionPersister 持久化器,ICollectionAliases 描述符,IDataReader rs,ISessionImplementor 会话)+407 NHibernate.Loader.Loader.ReadCollectionElements(Object[] 行,IDataReader 结果集,ISessionImplementor 会话)+412 NHibernate.Loader.Loader .GetRowFromResultSet(IDataReader resultSet, ISessionImplementor session, QueryParameters queryParameters, LockMode[] lockModeArray, EntityKey optionalObjectKey, IList hydradObjects, EntityKey[] 键,Boolean returnProxies) +472 NHibernate.Loader.Loader.DoQuery(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) +1010 NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters, Boolean returnProxies) +114 NHibernate.Loader.Loader.LoadCollection (ISessionImplementor 会话,对象 id,IType 类型)+362

[GenericADOException:无法初始化集合:[Questionnaires.Core.Questionnaire.Questions#CBDEDAFC183B4CD7AF1422423A91F589] [SQL:SELECT questions0_.ida_questionnaire_id为ida4_2_,questions0_.ida_questionnaire_question_id为ida1_2_,questions0_.ida_questionnaire_question_id为ida1_5_1_,questions0_.question_no为question2_5_1_,questions0_。 ida_question_id为ida3_5_1_,questions0_.ida_questionnaire_id为ida4_5_1_,question1_.ida_question_id为ida1_3_0_,question1_.ida_question_type_id为ida2_3_0_,question1_.description为descript3_3_0_,question1_.validate_max为validate4_3_0_,question1_.validate_min作为validate5_3_0_ FROM ida_questionnaire_question questions0_留在questions0_外连接ida_question question1_。 ida_question_id=question1_.ida_question_id WHERE questions0_.ida_questionnaire_id=?]] NHibernate.Loader。Loader.LoadCollection(ISessionImplementor session, Object id, IType type) +528 NHibernate.Loader.Collection.CollectionLoader.Initialize(Object id, ISessionImplementor session) +74 NHibernate.Persister.Collection.AbstractCollectionPersister.Initialize(Object key, ISessionImplementor session) + 59 NHibernate.Event.Default.DefaultInitializeCollectionEventListener.OnInitializeCollection(InitializeCollectionEvent 事件) +573 NHibernate.Impl.SessionImpl.InitializeCollection(IPersistentCollection 集合,布尔写法) +150 NHibernate.Collection.AbstractPersistentCollection.ForceInitialization() +287 NHibernate.Engine.StateonfulsLatestCollection () +213 NHibernate.Loader.Loader.DoQueryAndInitializeNonLazyCollections(ISessionImplementor session, QueryParameters queryParameters,Boolean returnProxies) +171 NHibernate.Loader.Loader.LoadEntity(ISessionImplementor session, Object id, IType identifierType, Object optionalObject, String optionalEntityName, Object optionalIdentifier, IEntityPersister persister) +493 NHibernate.Loader.Entity.AbstractEntityLoader.Load(ISessionImplementor session, Object id, Object optionalObject, Object optionalId) +82 NHibernate.Loader.Entity.AbstractEntityLoader.Load(Object id, Object optionalObject, ISessionImplementor session) +54 NHibernate.Persister.Entity.AbstractEntityPersister.Load(Object id, Object optionalObject, LockMode lockMode, ISessionImplementor 会话)+206 NHibernate.Event.Default.DefaultLoadEventListener.LoadFromDatasource(LoadEvent 事件,IEntityPersister 持久化,EntityKey keyToLoad,LoadType 选项)+133 NHibernate.Event.Default。DefaultLoadEventListener.DoLoad(LoadEvent 事件,IEntityPersister 持久化,EntityKey keyToLoad,LoadType 选项)+948 NHibernate.Event.Default.DefaultLoadEventListener.Load(LoadEvent 事件,IEntityPersister 持久化,EntityKey keyToLoad,LoadType 选项)+436 NHibernate.Event.Default.DefaultLoadEventListener。 ProxyOrLoad(LoadEvent event, IEntityPersister persister, EntityKey keyToLoad, LoadType options) +236 NHibernate.Event.Default.DefaultLoadEventListener.OnLoad(LoadEvent event, LoadType loadType) +1303 NHibernate.Impl.SessionImpl.FireLoad(LoadEvent event, LoadType loadType) +125 NHibernate.Impl.SessionImpl.Get(String entityName, Object id) +145 NHibernate.Impl.SessionImpl.Get(Type entityClass, Object id) +66 NHibernate.Impl.SessionImpl.Get(Object id) +91 SharpArch.Data.NHibernate .RepositoryWithTypedId`2.Get(IdT id) +152 Questionnaires.Controllers.QuestionnaireController.Create(String username, String id) in C:\Documents and Settings\berbor\Mine dokumenter\Visual Studio 2008\Projects\Questionnaires\Questionnaires.Controllers\ QuestionnaireController.cs:40 lambda_method(ExecutionScope, ControllerBase, Object[]) +205 System.Web.Mvc.ActionMethodDispatcher.Execute(ControllerBase 控制器, Object[] 参数) +17 System.Web.Mvc.ReflectedActionDescriptor.Execute(ControllerContext controllerContext, IDictionary`2 个参数)+178 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethod(ControllerContext controllerContext,ActionDescriptor actionDescriptor,IDictionary`2 个参数)+24 System.Web.Mvc.<>c__DisplayClassa.b__7() +52 System.Web.Mvc .ControllerActionInvoker。InvokeActionMethodFilter(IActionFilter filter, ActionExecutingContext preContext, Func`1 continuation) +254 System.Web.Mvc.<>c__DisplayClassc.b__9() +19 System.Web.Mvc.ControllerActionInvoker.InvokeActionMethodWithFilters(ControllerContext controllerContext, IList`1 过滤器, ActionDescriptor actionDescriptor , IDictionary`2 参数) +192 System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName) +350 System.Web.Mvc.Controller.ExecuteCore() +110 System.Web.Mvc.ControllerBase.Execute(RequestContext requestContext)+27 System.Web.Mvc.ControllerBase.System.Web.Mvc.IController.Execute(RequestContext requestContext)+7 System.Web.Mvc.MvcHandler.ProcessRequest(HttpContextBase httpContext)+119 System.Web.Mvc.MvcHandler。ProcessRequest(HttpContext httpContext) +41 System.Web.Mvc.MvcHandler.System.Web.IHttpHandler.ProcessRequest(HttpContext httpContext) +7 System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181 System.Web .HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75


至于我这样做的原因:

一个问卷可能有很多问题,一个问题可能有很多问卷。我希望能够Questions根据上下文(Questionnaire在其中)给出一些属性,一个问题可能需要在一个调查问卷中,而不是另一个问题等。这不仅仅是顺序,这只是一个试图保持简单的例子。

尝试将数据加载到Questionnaire.IList<Question>. 在我修改我IList<Questionnaire>的 toIList<QuestionnaireQuestion>和相应的映射后,它仍然被抛出。

那么问题将Questionnaire.Questions是映射为包含QuestionnaireQuestion但类型为Question。但是,如果我尝试将其映射为包含QuestionnaireQuestion我的 SQL,则根本不加入,它仍然会失败。这是我应该做的,只是我做错了吗?在我读到的示例中,他就像我所看到的那样做,唯一的区别是现在使用泛型的 FluentNhibernate 的较新版本。所以我需要指定正确的类型。

0 投票
8 回答
19936 浏览

nhibernate - NHibernate:使用 Fluent Nhibernate 保存子对象

在我的系统中,我有两个实体 - ShoppingCart 和 ShoppingCartItem。相当通用的用例。但是,当我保存我的 ShoppingCart 时,没有任何项目被保存到数据库中。

在我的对象中,我创建了一个新的 ShoppingCart 对象。

然后,我将从数据库中获取的现有产品添加到开头。

这只是将项目添加到 IList 的简单包装器。

然后我在存储库上调用 SaveOrUpdate

看起来像这样:

我正在使用 Fluent NHibernate 进行映射:

数据库架构 (SQL Server 2005) 也相当通用:

当我保存或更新我的 ShoppingCart 时,为什么没有任何 ShoppingCartItems 也被保存?

请帮忙。

谢谢

更新:将其包装在交易中,为我提供了更多信息:

无法将值 NULL 插入到列“ShoppingCartId”、表“WroxPizza.dbo.ShoppingCartItems”中;列不允许空值。插入失败。该语句已终止。

这是因为它是一辆新推车。

0 投票
2 回答
562 浏览

fluent-nhibernate - Fluent-NHibernate 映射

在我的数据库中,我有一个包含逗号分隔的电子邮件列表的字段。我如何将它映射到IList<string>我的模型中的 a ?

0 投票
4 回答
2995 浏览

asp.net-mvc - ASP.NET MVC + fluent nNibernate,什么IoC工具?

我正在开发一个 ASP.NET MVC 项目,我们决定使用 Fluent nHibernate 进行数据访问。为了实现松散耦合,我们采用 IoC/DI 模式。我的问题是要使用什么 IoC 工具。我试图找出 windsor、ninject、spring、structuremap 和 unity 之间的区别,但很难看出每个人都提供的好处。你的经验是什么?

0 投票
2 回答
2120 浏览

fluent-nhibernate - Fluent NHibernate 多对多类型约定

我在 Fluent NHIbernate 中使用 AutoPersistenceModel 来映射我的所有实体,并且一切正常:D

但是,我的几个对象有

在数据库中只有一个评论表,每个带有上述代码的实体都有自己的评论链接表。

目前我正在做的是:

对于每个实体。

有什么方法可以设置一个约定,其中所有到 IList<Comment> 的映射都自动连接到上面的表名称约定中的 manytomany?

谢谢

安德鲁

0 投票
2 回答
3854 浏览

nhibernate - 流畅的 NHibernate + Lucene 搜索 (NHibernate.Search)

我正在使用 Fluent NHibernate,我想用 Lucene 实现 NHibernate.Search,但我找不到任何关于如何使用 Fluent NHibernate 来实现的示例。似乎有两个步骤。(根据城堡

  1. 在配置中设置 Hibernate 属性:

    • hibernate.search.default.directory_provider
    • hibernate.search.default.indexBase
    • hibernate.search.analyzer
  2. 初始化事件侦听器以索引持久对象

    • configuration.SetListener(ListenerType.PostUpdate, new FullTextIndexEventListener());
    • configuration.SetListener(ListenerType.PostInsert, new FullTextIndexEventListener());
    • configuration.SetListener(ListenerType.PostDelete, new FullTextIndexEventListener());

我想出了如何将属性添加到 Fluent NHibernate 源配置,但我找不到设置事件侦听器的位置。

0 投票
1 回答
6822 浏览

fluent-nhibernate - Fluent NHibernate 一对多单向映射

我有 Post 和 Comment 类,它们有一对多的关系,其中 Post 有一个 Comments 列表。我如何将其映射为与 Fluent NHibernate 的单向关系,因为评论不需要知道其父 Post?目前,这是我的评论映射:

和邮政:

这不起作用,因为当我尝试使用新添加的评论保存 Post 实例时,评论 (PostId) 上的外键为空。当然,不能使用 NULL PostId 保存评论。我试过删除 .Inverse() 子句,但这也不起作用。