【发布时间】:2009-06-12 21:40:44
【问题描述】:
更新
好吧,正如 Stuart Charles 和 James Gregory 告诉我的,我的模型一开始就很奇怪。显然,在区分不同类型的关系时,类之间的双向引用并没有完成,而且显然是有充分理由的。
我拆掉了模型,在 Users 和 Fiches 之间使用 HasManyToMany 将其更改为不同的模型,然后我添加了一些编码验证以确保我的用户不能链接到多个 Fiche。
所以我想这类问题的答案是一种警告:“不要这样做”;)
感谢两位花时间回答!
大家好
正确使用 Fluent Nhibernate 是一条艰难的道路,而且由于我开始感到非常难过,我认为寻求帮助不会有什么坏处。事情是这样的。
罪魁祸首
我有以下两个类,Fiche 和 User。一个 Fiche 必须有一个 User 所有者,并且可以有许多 User 关注者。另一方面,用户可以选择链接回一个且只有一个 Fiche。 (EntityUpdateTrace 基类包含一个 guid id 和创建/修改时间,供 PreSave/PreUpdate 使用)
Public Class Fiche
Inherits EntityUpdateTrace(Of Fiche)
Private m_Owner As User
Public Property Owner() As User
' snip
Private m_Followers As IList(Of User)
Public Property Followers() As IList(Of User)
' snip
End Class
Public Class User
Inherits EntityUpdateTrace(Of User)
Private m_Fiche As Fiche
Public Property Fiche() As Fiche
' snip
End Class
然后我有以下映射
Public Class FicheMapping
Inherits ClassMap(Of Fiche)
Public Sub New()
[Not].LazyLoad()
Id(Function(f As Fiche) f.Id).GeneratedBy.GuidComb()
References(Of User)(Function(f As Fiche) f.Owner).Not.Nullable()
HasMany(Of User)(Function(f As Fiche) f.Followers).Inverse()
End Sub
End Class
Public Class UserMapping
Inherits ClassMap(Of User)
Public Sub New()
[Not].LazyLoad()
Id(Function(a As User) a.Id).GeneratedBy.GuidComb()
References(Of Fiche)(Function(a As User) a.Fiche).Nullable()
End Sub
End Class
问题
我到底做错了什么? :) 我似乎无法让这个模型工作,尽管它看起来很简单。
Fiche 加载与其相关的所有用户;听起来合乎逻辑,我想我应该区分一个特定的参数,但由于它完全与数据库相关,所以我不太喜欢这个想法(我试图保持课程干净整洁,作为域卫生方面的练习)。因此,如果 FicheveryImportantFiche 由 Alice 创建并由 Bob 跟随,则在重新加载关注者时,我会找到 Alice 和 Bob。有没有办法区分这两种类型的用户?
-
我想在数据库中使用一个列表来保持关注者有序,但是一旦我将映射更改为
HasMany(Of User)(Function(f As Fiche) f.Followers).AsList().Inverse()
弹出如下错误:
用于集合的空索引列: 追随者
关于这个错误的信息量并不是真的太多,这让我认为我对这个模型采取了错误的方式,这让我回到了第一个问题......我到底做错了什么?
感谢大家的阅读以及对此的任何见解!
【问题讨论】:
标签: nhibernate fluent-nhibernate mapping