C# 使用Fluent NHibernate时出现映射异常

C# 使用Fluent NHibernate时出现映射异常,c#,nhibernate,orm,fluent-nhibernate-mapping,C#,Nhibernate,Orm,Fluent Nhibernate Mapping,当我试图对一个数据库在POCO上执行CRUD操作时,我得到了一个异常:NHibernate映射异常:没有持久化器:MyNamespace.Model.User 这是我的密码: namespace MyNamespace.Model { public interface IModel<TID> { TID ID { get; set; } } public class User : IModel<int> {

当我试图对一个数据库在POCO上执行CRUD操作时,我得到了一个异常:NHibernate映射异常:没有持久化器:MyNamespace.Model.User

这是我的密码:

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; }
    }
}
名称空间MyNamespace.Model
{
公共接口IModel
{
TID ID{get;set;}
}
公共类用户:IModel
{
公共虚拟整数ID{get;set;}
公共虚拟字符串名称{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();
        }
    }
}
namespace MyNamespace.Model.Mapping
{
公共类UserMap:ClassMap
{
公共用户映射()
{
表(“用户”);
Id(x=>x.Id);
映射(x=>x.Name)
.长度(255)
.Unique()
.Not.Nullable();
}
}
}
在配置文件中,我添加了程序集映射:

<hibernate-configuration xmlns="urn:nhibernate-configuration-2.2">
    <session-factory>
        ...
        <mapping assembly="MyNamespace" /> 
    </session-factory>
</hibernate-configuration>

...
我知道,如果使用hbm文件,而不是将其设置为嵌入式资源,则会出现此类问题。但在我的例子中,我使用的是Fluent NHibernate,而没有使用这样的文件。我还在这里读到,映射类应该是公共的——正如您所看到的,我已经这样做了。模型类的所有属性都是虚拟的(以允许代理发挥其魔力)。我完全不知道我在这里遗漏了什么,我很高兴听到关于这个问题的任何建议。

元素用于hbm资源,而不是流畅的映射

这直接来自于流畅的NHibernate:

私有静态ISessionFactory CreateSessionFactory()
{
流畅地返回。Configure()
.数据库(
SQLiteConfiguration.Standard
.UsingFile(“firstProject.db”)
)
.Mappings(m=>
m、 FluentMappings.AddFromAssemblyOf())
.BuildSessionFactory();
}

此错误消息在大多数情况下意味着NHibernate没有您试图保存的实体的映射。因此,请使用配置您的会话工厂,以便为其提供映射

目前我无法尝试你的解决方案,但我很好奇为什么这可能是原因。我正在使用
configuraton.BuildSessionFactory()
以同样老式的方式配置会话工厂。考虑到app.config设置,可能没有扫描映射类?使用不同的方法来配置相同的东西,使用相同的信息,这有点令人困惑,因此它的工作方式也不同。NHibernate不了解Fluent。因此,NH的本机配置不可能读取Fluent映射。感谢您的回答和澄清。现在我意识到fluent以完全不同的方式维护映射信息,可能与hbm专用存储不兼容。我只是错误地认为Fluent会考虑app.config中传递的程序集。
private static ISessionFactory CreateSessionFactory()
{
  return Fluently.Configure()
    .Database(
      SQLiteConfiguration.Standard
        .UsingFile("firstProject.db")
    )
    .Mappings(m =>
      m.FluentMappings.AddFromAssemblyOf<Program>())
    .BuildSessionFactory();
}