【问题标题】:No persister for Entity实体没有持久化器
【发布时间】:2010-01-01 21:09:56
【问题描述】:

我定义了一个简单的 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);
        }
    }
}

然后尝试像这样使用它:

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);
        }
    }
}

我收到以下错误:

未处理的类型异常 'NHibernate.MappingException' 发生 在 NHibernate.dll 中

附加信息:没有持久化器 对于:BugNS.Entities.Bug

很抱歉,我刚开始从文档中学习 Fluent 和 NHibernate。如果有人知道这个问题的解决方案,那就太好了,因为我已经花了很多时间白费了。

【问题讨论】:

    标签: nhibernate fluent


    【解决方案1】:

    类的访问级别必须是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);
        }
    }
    

    当我开始使用 Fluent 时,这对我来说也是一个问题。

    另外一件通常出错的事情是错过了virtual 关键字,NHibernate 需要它来更改这些属性。很高兴你把那部分弄对了:)

    希望对您有所帮助。

    谢谢

    【讨论】:

    • 非常感谢,Visual Studio 默认创建了私有类,没有提到创建公共类。如此简单的错误会耗费大量时间。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-13
      • 1970-01-01
      • 2012-01-09
      • 1970-01-01
      • 1970-01-01
      • 2016-06-10
      • 2021-06-26
      • 2013-02-17
      相关资源
      最近更新 更多