当我试图对POCO对数据库执行CRUD操作时,我得到一个异常:NHibernate映射例外:没有持久性:MyNamespace.Model.User。使用流利NHibernate时映射异常
这里是我的代码:
namespace MyNamespace.Model
{
public interface IModel<TID>
{
TID ID { get; set; }
}
public class User : IModel<int>
{
public virtual int ID { get; set; }
public virtual string Name { get; set; }
}
}
,这里是我的映射
namespace MyNamespace.Model.Mapping
{
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("User");
Id(x => x.ID);
Map(x => x.Name)
.Length(255)
.Unique()
.Not.Nullable();
}
}
}
在我的配置文件我已经添加了装配映射:
<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
<session-factory>
...
<mapping assembly="MyNamespace" />
</session-factory>
</hibernate-configuration>
我知道,这样的如果使用hbm文件,则未设置为嵌入式资源时会发生问题。但在我的情况下,我使用的流利NHibernate没有这样的文件被使用。我也在这里读到,Mapping类应该是公开的 - 我已经完成了,正如你所看到的。我的模型类的所有属性都是虚拟的(以允许代理完成他们的魔术)。我完全不知道我在这里错过了什么,我很乐意听到这个问题的任何建议。
目前我无法尝试您的解决方案,但我很好奇为什么这可能是原因。我正在使用'configuraton.BuildSessionFactory()'以相同的老式方式配置会话工厂。考虑到app.config设置,可能映射类没有被扫描?使用不同的方式来配置相同信息的同一事物有点令人困惑,并且结果是它的工作方式不同。 – 2012-03-06 08:46:58
NHibernate不了解Fluent。因此,NH的本地配置不可能读取Fluent映射。 – 2012-03-06 12:38:05
谢谢你的回答和澄清。现在我意识到,流利的维护映射信息的方式完全不同,可能与hbm专用存储不兼容。我错误地认为Fluent会考虑在app.config中传递的程序集。 – 2012-03-07 08:15:13