Исключение при отображении при использовании Fluent NHibernate - PullRequest
1 голос
/ 06 марта 2012

Когда я пытался выполнить операции CRUD над POCO для базы данных, я получил исключение: Исключение отображения 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; }
    }
}

и вот мое отображение

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

В моем файле конфигурации я добавил отображение сборки:

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

Я знаю, что такая проблема возникает при использовании файлов hbm, когда они не установлены как встроенные ресурсы. Но в моем случае я использую Fluent NHibernate, где такие файлы не используются. Я также читал здесь, что классы Mapping должны быть публичными - я сделал это, как вы можете видеть. Все мои свойства класса модели являются виртуальными (чтобы прокси могли творить чудеса). Я абсолютно не знаю, что мне здесь не хватает, и я был бы рад услышать любые предложения по этому вопросу.

Ответы [ 2 ]

2 голосов
/ 06 марта 2012

Элемент <mapping> предназначен для ресурсов hbm, а не для отображений свободно.

Это прямо из Fluent NHibernate документы :

private static ISessionFactory CreateSessionFactory()
{
  return Fluently.Configure()
    .Database(
      SQLiteConfiguration.Standard
        .UsingFile("firstProject.db")
    )
    .Mappings(m =>
      m.FluentMappings.AddFromAssemblyOf<Program>())
    .BuildSessionFactory();
}
1 голос
/ 06 марта 2012

Это сообщение об ошибке в большинстве случаев означает, что в NHibernate нет сопоставлений для сущности, которую вы пытаетесь сохранить. Поэтому настройте фабрику сеансов с FluentNHibernate , чтобы обеспечить сопоставления для него.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...