我试图将我的模型中的枚举属性(System.DayOfWeek的实例)映射到整数数据库字段.模型中的其他枚举属性应该映射到字符串,所以我不希望定义约定.
我知道这应该可以使用流畅的映射,如:
Map(x => x.DayOfWeek).CustomType<int>();
Run Code Online (Sandbox Code Playgroud)
事实上,乍一看这似乎有效.
但是,我注意到每次刷新会话时都会更新具有以这种方式映射的属性的实体实例,即使没有对它们进行任何修改.
为了找出导致此刷新的原因,我设置了一个IPreUpdateEventListener,并检查了该实体的OldState和State.请参见附图.在OldState中,相关对象是int,而在State中它是DayOfWeek.
如果我使用未指定类型属性的HBM XML映射,则不会出现此问题.
所以...
这是GenericEnumMapper中的错误还是缺点?有没有办法告诉FNH映射不要在生成的HBM上指定任何类型属性?如果没有,我可以指定NH用于枚举的默认类型(以及那是什么)?

在项目中升级NHibernate和FluentNHibernate DLL后,我现在在初始化SessionFactory时遇到"无法确定:MyApp.Domain.Entities.AppCategory的类型"异常.我的代码中唯一的变化是调整ForeignKeyConvention的实现来覆盖GetKeyName ( Member member, Type type )抽象方法,而不是GetKeyName ( PropertyInfo property, Type type ).
对于FluentNHibernate,升级的DLL从1.0.0.593到1.1.0.685,对于NHibernate,升级的DLL从2.1.0.4000到2.1.2.4000.寻找解决方案的部分困难是我们正在使用的NHibernate版本的旧时代,但至少目前还无法改变.
我在下面发布了完整的例外和所有相关的代码和配置.我为这个长度道歉,但我不知道问题可能在哪里.
完全例外
FluentNHibernate.Cfg.FluentConfigurationException : An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.
----> FluentNHibernate.Cfg.FluentConfigurationException : An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.
----> NHibernate.MappingException : Could not compile the mapping document: (XmlDocument)
----> NHibernate.MappingException : Could not determine …Run Code Online (Sandbox Code Playgroud) 如何使用具有Fluent NHibernate的AutoMap持久性模型"打开"级联保存?
如:
我救人,手臂也应该保存.目前我明白了
"对象引用未保存的瞬态实例 - 在刷新之前保存瞬态实例"
public class Person : DomainEntity
{
public virtual Arm LeftArm { get; set; }
}
public class Arm : DomainEntity
{
public virtual int Size { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我发现了一篇关于这个主题的文章,但似乎已经过时了.
似乎我找不到使用流畅的Nhibernate定义nhibernate过滤器的正确语法.
我试图关注这个ayende的博文:
http://ayende.com/Blog/archive/2006/12/26/LocalizingNHibernateContextualParameters.aspx
我使用.FormulaIs()方法在我的属性上定义了公式,但在谷歌上找不到如何将此定义转换为流畅的nhibernate:
< filter-def name='CultureFilter'>
< filter-param name='CultureId' type='System.Int32'/>
< /filter-def>
Run Code Online (Sandbox Code Playgroud) 有没有办法在Fluent NHibernate中为我的主键约束创建命名约定?
我知道您可以命名外键约束,但似乎不可能命名主键约束.
constraints naming-conventions primary-key fluent-nhibernate
出乎意料的是,当使用nhibernate进行大量更新时,我收到此错误.
行已被另一个事务更新或删除(或未保存的值映射不正确):[MyDomainObject]
错误中没有其他信息.是否有一些建议的方法来帮助确定根本问题,或者有人可以给我一个更好的解释这个错误指示或是一个sympton周围.
我查看了对象,所有数据看起来都很好,它有一个ID等..
请注意,这是在asp.net-mvc网站的单个调用堆栈中运行,因此我不希望在并发性方面存在任何线程问题需要担心.
我必须在Fluent NHibernate中编写一个查询
Select * from Users where UserName = 'Abcd' AND Password = '123456'
如何用上面的查询创建 session.CreateCriteria
这是我的映射类:
class MyTableMap : ClassMap<MyTable>
{
public MyTableMap()
{
Schema("mySchema");
Id(x => x.id);
Map(x => x.SomeString);
}
}
Run Code Online (Sandbox Code Playgroud)
这适用于我的第一个数据库中的表([mySchema].[MyTable]).
但是这个表("MyTable")存在于(实际上很多)不同的数据库中,但由于任何原因,模式总是被命名为不同的(我没有任何控制权):
所以在数据库"OtherDB"中有表[SomeOtherSchema].[MyTable]与第一个db中的[mySchema].[MyTable]具有相同的结构.
出于显而易见的原因,我不想为每个数据库创建不同的映射类.
那么:有没有办法改变映射类的模式,所以我只需创建一个映射类(不使用singelton!)?
我有以下看似简单的场景,但是我对NHibernate还是一个新手.
尝试在Controller上为"编辑"操作加载以下模型时:
控制器的编辑操作:
public ActionResult Edit(Guid id)
{
return View(_repository.GetById(id));
}
Run Code Online (Sandbox Code Playgroud)
库:
public SomeModel GetById(Guid id)
{
using (ISession session = NHibernateSessionManager.Instance.GetSession())
return session.Get<SomeModel >(id);
}
Run Code Online (Sandbox Code Playgroud)
模型:
public class SomeModel
{
public virtual string Content { get; set; }
public virtual IList<SomeOtherModel> SomeOtherModel { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
- 懒得初始化角色集合:SomeOtherModel,没有关闭会话或会话
我在这里错过了什么?
我在尝试绘制多对多关系时遇到了问题,其中关系的两侧都引用了同一个实体.我正在使用Fluent NHibernate和NH3.1.
基本上,情况是这样的 - 我有一个类别,可以有多个父母.因此,一个类别有多个其他类别作为父类,以及多个其他类别作为其子类.
HasManyToMany(x => x.ParentCategories).AsBag().Table("parentcategorychildren").ParentKeyColumn("ChildID").ChildKeyColumn("ParentID").Cascade.SaveUpdate();
HasManyToMany(x => x.ChildrenCategories).AsBag().Table("parentcategorychildren").ParentKeyColumn("ParentID").ChildKeyColumn("ChildID").Inverse();
Run Code Online (Sandbox Code Playgroud)
但是,当我尝试构建工厂时,我收到以下错误:
Category.ChildrenCategories与Category.ChildrenCategories的关系在双方都指定了Inverse.从关系的一侧移除反向.
我发现奇怪的是为什么它将Category.ChildrenCategories提到Category.ChildrenCategories,而不是ParentCategories?
任何帮助将不胜感激 !
我刚刚为此创造了一笔赏金,因为这对我来说非常重要.拜托,我对"你不能这样做"作为答案不感兴趣.
c# nhibernate entity-relationship many-to-many fluent-nhibernate
nhibernate ×7
c# ×3
asp.net-mvc ×1
automapping ×1
constraints ×1
many-to-many ×1
primary-key ×1
schema ×1