我正在试图弄清楚如何构建我的实体映射以实现以下目的:
public class Document
{
public virtual string Name { get; set; }
// Other properties
public IList<Document> RelatedDocuments { get; set; }
}
我想要一个关系表,其中包含相关Document
s的ID对。
现在我正在用这个SO问题中描述的解决方案来解决这个问题:Fluent Nhibernate mapping related items(疯狂的巧合,OP的名字和我的名字一样)。
我宁愿拥有一个相关项目列表,也不一定要有一个RelatedTo
和一个RelatedFrom
。那可能吗?
RelatedDocuments
列表中包含文档B,文档B的RelatedDocuments
列表需要文档A,,无需创建两个关系。
答案 0 :(得分:1)
尝试这样的事情:
class Document
{
public int Id { get; set; }
public string Name { get; set; }
public IList<Document> Related { get; set; }
public void RelateTo(Document other)
{
this.Related.Add(other);
other.Related.Add(this);
}
}
class DocumentMap : FluentNHibernate.Mapping.ClassMap<Document>
{
public DocumentMap()
{
Table("Documents");
Id(x => x.Id);
Map(x => x.Name);
HasManyToMany(x => x.Related)
.Table("DocumentRelations")
.ParentKeyColumn("DocumentId")
.ChildKeyColumn("RelatedDocumentId");
}
}
DocumentRelations
表是关联表,指定RelatedDocumentId
与DocumentId
相关。表格如下:
create table Documents
(
Id int identity primary key clustered,
Name varchar(100)
)
create table DocumentRelations
(
DocumentId int,
RelatedDocumentId int,
primary key clustered (DocumentId,RelatedDocumentId)
)
您应该考虑是否需要与关系本身相关的任何数据。在这种情况下,相关集合将是RelatedDocument实例的集合,它将相关文档作为属性,映射将是HasMany。