【问题标题】:fluent nhibernate Exception error流利的休眠异常错误
【发布时间】:2010-01-29 09:26:05
【问题描述】:

我正在尝试在 MVC 项目中实现流畅的 nhibernate...没有构建错误...但是当我运行项目时出现此异常

System.Xml.Schema.XmlSchemaValidationException: The element 'class' in namespace 'urn:nhibernate-mapping-2.2' has incomplete content. List of possible elements expected: 'meta, subselect, cache, synchronize, comment, tuplizer, id, composite-id' in namespace 'urn:nhibernate-mapping-2.2'.

不知道这里做错了什么...以下是打开会话工厂的代码...

Private Function CreateSessionFactory() As ISessionFactory
    Dim sessionFactoryObject As ISessionFactory
    sessionFactoryObject = Fluently.Configure().Database(FluentNHibernate.Cfg.Db.MsSqlConfiguration.MsSql2005.ConnectionString("Data Source=.\sqlexpress;Initial Catalog=Designs;User ID=sa;Password=root")).Mappings(Function(x) x.FluentMappings.Add(GetType(DesignMap))).BuildSessionFactory()
    Return sessionFactoryObject
End Function

这真的让我发疯了....提前谢谢...:)

更新-映射 设计表图

Public Class DesignMap
Inherits ClassMap(Of Design)

Public Sub DesignMap()
    Table("DesignList")
    Id(Function(x) x.DesignId)
    Map(Function(x) x.DesignType)
    References(Function(x) x.Designer, "DesignerId")
End Sub
End Class

设计师桌图

Public Class DesignerMap
Inherits ClassMap(Of Designer)
Public Sub DesignerMap()
    Table("DesignerList")
    Id(Function(x) x.DesignerId)
    Map(Function(x) x.DesignerName)
    Map(Function(x) x.DesignerCompany)
    HasMany(Function(x) x.DesignersDesigns)
End Sub
End Class

新的编辑——实体属性看起来像这样

    Public Overridable Property Name() As String
     Get
        Return _name
     End Get
     Protected Set(ByVal value As String)
        _name = value
     End Set
    End Property

我走对了吗..?

【问题讨论】:

  • 该错误意味着映射有问题。你能发布你的地图(DesignMap)吗?
  • 当您缺少 id 时,该特定错误最常见。请显示您的映射。
  • 我完全迷路了。请检查映射...

标签: asp.net asp.net-mvc fluent-nhibernate


【解决方案1】:

我不太确定,因为映射似乎没问题。我可以看到一个错误,你只映射了你的一个类:

.Mappings(Function(x) x.FluentMappings.Add(GetType(DesignMap)))

这不应该导致这种类型的错误。如果您添加了两个映射并调用方法.ExportTo(@"C:\your\export\path"),您将获得实际的xml 映射。这样更容易看到错误。你可以这样做:

.Mappings(Function(x) x.FluentMappings.Add(GetType(DesignMap)).Add(GetType(DesignerMap
).ExportTo(@"C:\your\export\path"))

如果不想一一添加映射,也可以使用AddFromAssemblyOf方法(或其他方法,有几种选择)。

尝试导出映射,看看是否能找到任何错误。或者您可以发布 xml 映射,其他人可能会找到一些东西。

【讨论】:

  • 你得到 xml 映射了吗?错误在某处。通常通过查看 xml 更容易找到它。
【解决方案2】:

有几件事会导致这种情况。使用自动映射时,如果您错误地指定了要查看的程序集和命名空间,您将得到此信息。可能导致它的其他事情(在您的情况下更有可能)是未标记为公共虚拟的实体属性,具有实体构造函数带参数,但忽略了创建默认构造函数,或从基类继承实体。

我可能会首先检查以确保您的所有实体属性都是“公共虚拟的”。

【讨论】:

  • 抱歉回复晚了...周末出去了...我尝试了虚拟属性...仍然没有改善....:(
【解决方案3】:

发现问题了……地图的构造函数错了……应该是这样的……

Public Class DesignMap
 Inherits ClassMap(Of Design)

 Public Sub New()
  Table("DesignList")
  Id(Function(x) x.DesignId)
  Map(Function(x) x.DesignType)
  References(Function(x) x.Designer, "DesignerId")
End Sub
End Class

我猜同时在 C# 和 vb.net 中工作的问题..!!

并且“Matthew Talbert”是正确的...使所有属性都可覆盖很重要..

谢谢大家...:)

【讨论】:

  • 呵呵,太明显了。抱歉我没看到。多年未使用 vb。
猜你喜欢
  • 1970-01-01
  • 2012-07-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-14
  • 1970-01-01
  • 2014-08-22
  • 2011-09-20
相关资源
最近更新 更多