Никакой стойкий организм для Объекта

Я определяю простой Класс Ошибки:

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. Ошибка

Я сожалею, но я только что начал учиться Быстрый и NHibernate из документов. Было бы замечательно, если кто-то знает решение этой проблемы, поскольку я уже провожу много часов напрасно.

5
задан Priyank Bolia 1 January 2010 в 21:09
поделиться

2 ответа

Уровень доступа класса должен быть публичным , чтобы 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, чтобы внести изменения в эти свойства. Приятно, что вы исправили эту часть :)

Надеюсь, это поможет.

Спасибо

.
7
ответ дан 14 December 2019 в 01:09
поделиться

Вам нужно сделать классы Bug и BugMap общедоступными, чтобы NHibernate/Fluent NHibernate мог их видеть.

.
2
ответ дан 14 December 2019 в 01:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: