Ассоциация ссылается на не отображенный класс: System.Guid - PullRequest
2 голосов
/ 23 июня 2011

Я получаю исключение Association references unmapped class: System.Guid с NHibernate 3.1 и FluentNHibernate 1.2.

Я не уверен, как это возможно.Разве отображение Guid не обрабатывается внутренне?

Я видел несколько предыдущих упоминаний об ошибке в Fluent NHibernate 1.0, и кто-то упоминал об использовании магистрали вместо того, где она была исправлена, но я использую 1.2, а не 1.0,по-видимому, эта проблема была решена.

Редактировать: Вот некоторая дополнительная информация - пример HBM, который я экспортировал из Fluent AutoMapper, выглядит следующим образом

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2" default-lazy="false">
  <class xmlns="urn:nhibernate-mapping-2.2" lazy="false" name="Treadmarks.Bus.Frontend.Model.PassType, Frontend, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" table="`PassType`">
    <id name="PassTypeId" type="System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="PassTypeId" />
      <generator class="guid.comb" />
    </id>
    <property name="Name" type="System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="Name" />
    </property>

    <property name="UsageInterval" type="System.TimeSpan, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
      <column name="UsageInterval" />
    </property>
  </class>
</hibernate-mapping>

И ниже приведенКод FNH, который генерирует указанный HBM:

    private class AutomappingConfiguration : DefaultAutomappingConfiguration
    {
        public override bool ShouldMap(Type type)
        {
            return type.Namespace.StartsWith("Treadmarks.Bus.Frontend.Model");
        }

        public override bool IsId(FluentNHibernate.Member member)
        {
            return member.Name == member.DeclaringType.Name + "Id";
        }
    }

    public static Configuration BuildConfiguration()
    {
        return Fluently.Configure()
            .Database(SQLiteConfiguration.Standard.ConnectionString("Data Source=Treadmarks.db; Compress=true"))
            .Mappings(
                m => m.AutoMappings.Add(AutoMap.Assembly(Assembly.GetExecutingAssembly(), new AutomappingConfiguration())
                                            .Conventions.Add(
                                                DefaultLazy.Never(),
                                                LazyLoad.Never())
                         ).ExportTo("mappings.hbm"))
            .BuildConfiguration();
    }

Ответы [ 3 ]

2 голосов
/ 25 июня 2011

Оказывается, FNH не может правильно сгенерировать отображение для List<Guid>, как это может для List<int> и т. Д. Я сообщу об этом команде FNH.

0 голосов
/ 23 июня 2011

Вчера я получил это сообщение об ошибке при подключении Fluent к новому проекту. Сейчас он работает (с клавишами Guid), но сейчас я не могу воспроизвести ошибку.

Само сообщение сообщает, что ищет конфигурацию отображения для System.Guid. Мое лучшее предположение состоит в том, что он видит имя свойства, которое запускает его логику внешнего ключа, и что имя свойства связано с Guid.

Может быть, вы могли бы добавить новое соглашение о внешнем ключе, чтобы оно больше не делало эти предположения с этой логикой по умолчанию?

0 голосов
/ 23 июня 2011

Вам не нужно указывать тип для отображения идентификатора, или если вы действительно указываете тип nhibernate, например, 'Guid', см. http://nhforge.org/doc/nh/en/index.html#mapping-types

...