5

我定义了一个简单的 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.dll 中发生了“NHibernate.MappingException”类型的未处理异常

附加信息:没有持久性:BugNS.Entities.Bug

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

4

2 回答 2

7

类的访问级别需要公开,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 时,这对我来说也是一个问题。

One more thing that generally goes wrong is missing out virtual keyword, which is needed for NHibernate to make changes to those properties. Its nice that you made that part correct :)

Hope that helps.

Thanks

于 2010-01-01T21:30:02.917 回答
2

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

于 2010-01-01T21:21:32.810 回答