我在使用Fluent NHibernate创建关系时遇到了麻烦。 一般来说,我有两个表,资源和项目:
请注意资源表中的PK既是id又是语言环境。 这意味着,一个项目实际上可以拥有很少的资源(相同的ID但不同的语言环境)。
因为它不是一对一的简单关系,我很难用Fluent NHibernate映射这两个。
克服这个问题的正确方法是什么?
非常感谢!
答案 0 :(得分:0)
如果关系是给定的Resource
由给定的Item
所拥有,则可以这样建模(注意:仅包含重要的部分):
public class Item
{
public virtual int Id { get; protected set; }
public virtual IList<Resource> Resources { get; protected set; }
// Constructor, Equals, GetHashCode, other things ... omitted.
}
public class Resource
{
public virtual Item Owner { get; protected set; }
public virtual int ResourceId { get; protected set; }
public virtual string Locale { get; protected set; }
public virtual string Value { get; protected set; }
// Constructor, Equals, GetHashCode, other things ... omitted.
}
并创建以下类映射:
public class ItemMap : ClassMap<Item>
{
public ItemMap()
{
WithTable("items");
Id(x => x.Id); // add Id generation cfg if needed
HasMany(x => x.Resources)
.Inverse()
.Cascade.All()
}
}
public class ResourceMap : ClassMap<Resource>
{
public ResourceMap()
{
WithTable("resources")
CompositeId()
.KeyProperty(x => x.ResourceId)
.KeyProperty(x => x.Locale);
References(x => x.Owner)
}
}