关联引用未映射的类:System.Guid

时间:2011-06-23 00:34:23

标签: c# nhibernate fluent-nhibernate guid

我继续使用NHibernate 3.1和FluentNHibernate 1.2获得异常Association references unmapped class: System.Guid

我不确定这是怎么回事。是不是内部处理了Guid的映射?

我之前看到过几次提到Fluent NHibernate 1.0中的一个错误,并且有人提到使用trunk而不是修复它,但是我在1.2而不是1.0,所以可能这个问题已经解决了。

编辑:这是一些额外的信息 - 我从Fluent AutoMapper导出的HBM示例如下所示

<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>

以下是生成HBM的FNH代码:

    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 个答案:

答案 0 :(得分:2)

事实证明,FNH无法像List<Guid>那样正确地为List<int>生成映射,等等。我会向FNH团队报告此事。

答案 1 :(得分:0)

我昨天在为一个新项目连接Fluent时收到了此错误消息。它现在正在工作(使用Guid键)但我现在无法重现错误。

消息本身传达了它正在寻找System.Guid的映射配置。我最好的猜测是,它看到的是一个触发其外键逻辑的属性名称,并且该属性名称与Guid相关联。

也许您可以添加一个新的外键约定,以便它不再使用该默认逻辑进行这些假设?

答案 2 :(得分:-1)

您不需要指定id映射的类型,或者如果您指定了像'Guid'这样的nhibernate类型,请参阅http://nhforge.org/doc/nh/en/index.html#mapping-types