我正在尝试关联2个项目。我有一个表只是一个Id字段,然后有2列用于项目ID的关联。我希望它是一种双向关系 - 也就是说,如果项目在表格中出现两次,我只想要一个关系连接回来。
所以,这是我的项目:
public class Item
{
public virtual Guid ItemId {get; set;}
public virtual string Name {get; set;}
public virtual IList<Item> RelatedItems {get; set;}
}
关于项目的表格如下:
CREATE TABLE RelatedItems
(
RelatedItemId uniqueidentifier DEFAULT(NEWID()) NOT NULL,
ItemId uniqueidentifier NOT NULL,
RelatedId uniqueidentifier NOT NULL,
CONSTRAINT PK_RelatedItems PRIMARY KEY CLUSTERED (RelatedItemId)
)
映射此连接的最佳方法是什么?
答案 0 :(得分:1)
您需要使用“HasMany”映射。我认为以下内容可能有效:
public class Item : ClassMap<Item>
{
Id(x=>x.Id)
.Column("ItemId");
Map(x=>x.Name);
HasMany(x=>x.RelatedItems)
.KeyColumn("RelatedId")
.Table("RelatedItems")
.LazyLoad()
.AsList();
}
您始终可以使用Id字段的约定。并考虑HasMany集合上的级联删除选项。
答案 1 :(得分:0)
我必须这么做(阅读HACK)。
HasManyToMany(x => x.RelatedTo)
.Table("RelatedItems")
.ParentKeyColumn("ItemId")
.ChildKeyColumn("RelatedItemId");
HasManyToMany(x => x.RelatedToMe)
.Table("RelatedItems")
.ChildKeyColumn("ItemId")
.ParentKeyColumn("RelatedItemId");
然后在我的班级中我有一个名为RelatedItems的只读集合,它连接两个列表并选择要返回的不同项目。