Nhibernate 实体没有持久化器

Nhibernate 实体没有持久化器,nhibernate,fluent,Nhibernate,Fluent,我定义了一个简单的Bug类: using System; namespace BugNS.Entities { class Bug { public virtual int Id { get; private set; } public virtual int BugNumber { get; set; } } } 和一个简单的映射器类: using System; using FluentNHibernate.Mapping; usi

我定义了一个简单的Bug类:

using System;

namespace BugNS.Entities
{
    class Bug
    {
        public virtual int Id { get; private set; }
        public virtual int BugNumber { get; set; }
    }
}
和一个简单的映射器类:

using System;
using FluentNHibernate.Mapping;
using BugNS.Entities;

namespace BugNS.Mappings
{
    class BugMap : ClassMap<Bug>
    {
        public BugMap()
        {
            Id(b => b.Id);
            Map(b => b.BugNumber);
        }
    }
}
使用系统;
使用FluentNHibernate.Mapping;
使用BugNS.实体;
名称空间BugNS.Mappings
{
类错误映射:类映射
{
公共BugMap()
{
Id(b=>b.Id);
Map(b=>b.BugNumber);
}
}
}
然后试着像这样使用它:

using System;
using System.IO;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Tool.hbm2ddl;
using BugNS.Entities;

namespace BugNS
{
    class Program
    {
        private const string DbFile = "bugs.db";

        static void Main()
        {
            var sessionFactory = CreateSessionFactory();
            using (var session = sessionFactory.OpenSession())
            {
                using (var transaction = session.BeginTransaction())
                {
                    Bug b = new Bug { BugNumber = 121212 };
                    session.SaveOrUpdate(b);
                    transaction.Commit();
                }
            }
        }

        private static ISessionFactory CreateSessionFactory()
        {
            return Fluently.Configure()
                .Database(SQLiteConfiguration.Standard
                    .UsingFile(DbFile))
                .Mappings(m =>
                    m.FluentMappings.AddFromAssemblyOf<Program>())
                .ExposeConfiguration(BuildSchema)
                .BuildSessionFactory();
        }

        private static void BuildSchema(Configuration config)
        {
            // delete the existing db on each run
            if (File.Exists(DbFile))
                File.Delete(DbFile);

            // this NHibernate tool takes a configuration (with mapping info in)
            // and exports a database schema from it
            new SchemaExport(config)
              .Create(false, true);
        }
    }
}
使用系统;
使用System.IO;
使用FluentNHibernate.Cfg;
使用FluentNHibernate.Cfg.Db;
使用NHibernate;
使用NHibernate.Cfg;
使用NHibernate.Tool.hbm2ddl;
使用BugNS.实体;
命名空间错误
{
班级计划
{
私有常量字符串DbFile=“bugs.db”;
静态void Main()
{
var sessionFactory=CreateSessionFactory();
使用(var session=sessionFactory.OpenSession())
{
使用(var transaction=session.BeginTransaction())
{
Bug b=新Bug{BugNumber=121212};
会议.保存或更新(b);
Commit();
}
}
}
私有静态ISessionFactory CreateSessionFactory()
{
流畅地返回。Configure()
.Database(SQLiteConfiguration.Standard
.UsingFile(DbFile))
.Mappings(m=>
m、 FluentMappings.AddFromAssemblyOf())
.ExposeConfiguration(构建架构)
.BuildSessionFactory();
}
私有静态void BuildSchema(配置)
{
//在每次运行时删除现有数据库
if(File.Exists(DbFile))
Delete(DbFile);
//此NHibernate工具采用配置(映射信息位于)
//并从中导出数据库架构
新SchemaExport(配置)
.创建(假、真);
}
}
}
我得到了以下错误:

类型的未处理异常 出现“NHibernate.MappingException” 在NHibernate.dll中

附加信息:无持久性 适用于:BugNS.Entities.Bug


很抱歉,我刚开始从医生那里学习流利和NHibernate。如果有人知道这个问题的解决方案,那就太好了,因为我已经白白浪费了很多时间。

您需要公开Bug和BugMap类,以便NHibernate/Fluent NHibernate可以看到它们。

该类的访问级别必须是public,Fluent才能使用它

请尝试以下操作:

public class Bug
{
    public virtual int Id { get; private set; }
    public virtual int BugNumber { get; set; }
}

public class BugMap : ClassMap<Bug>
{
    public BugMap()
    {
        Id(b => b.Id);
        Map(b => b.BugNumber);
    }
}
公共类错误
{
公共虚拟整数Id{get;private set;}
公共虚拟整数BugNumber{get;set;}
}
公共类错误映射:类映射
{
公共BugMap()
{
Id(b=>b.Id);
Map(b=>b.BugNumber);
}
}
当我开始使用Fluent时,这对我来说也是一个难题

还有一件通常会出错的事情是遗漏了
virtual
关键字,这是NHibernate更改这些属性所必需的。很高兴你把那部分做对了:)

希望有帮助


谢谢

非常感谢,VisualStudio默认创建了私有类,没有提到创建公共类的地方。这种简单的错误花费了很多时间。