流利的NHibernate复杂(?)关系

时间:2015-04-28 18:07:03

标签: c# nhibernate fluent-nhibernate fluent-nhibernate-mapping

我在使用Fluent NHibernate创建关系时遇到了麻烦。 一般来说,我有两个表,资源和项目:

Resource & Items

请注意资源表中的PK既是id又是语言环境。 这意味着,一个项目实际上可以拥有很少的资源(相同的ID但不同的语言环境)。

因为它不是一对一的简单关系,我很难用Fluent NHibernate映射这两个。

克服这个问题的正确方法是什么?

非常感谢!

1 个答案:

答案 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)
    }
}