2

我们正在研究一个要求 MemberAgreement 根据网络和状态组合而变化的域。MemberAgreement 有一个模板,可由多个国家共享一个网络。

我们对实体建模的方式是

public class MemberAgreement
{
        public Network Network { get; protected set; }
        public List<State> States { get; protected set; }
        public Template Template {get; protected set; }
}

表格设计为:

Agreement
---------
Id
NetworkId
StateId
TemplateId

在此表协议中,NetworkId 和 TemplateId 可以针对不同的 StateId 重复。

现在,我如何在 Fluent NHibernate 中映射它?我们在网络和状态之间有一对多的关系,这两者的组合与模板有多对多的关系。

帮助表示赞赏。

个人电脑

4

1 回答 1

1

原样的表结构将迫使您更改MemberAgreement对象定义。每一行(按 ID 唯一)都引用了一个 ReferenceType:

public class MemberAgreement
{
  public virtual Network Network { get; protected set; }
  //  public List<State> States { get; protected set; }
  public virtual State State { get; protected set; }
  public virtual Template Template {get; protected set; }
}

有了这个,您的映射将被简化References(x => x.State)。但是更多的问题将出现在您的业务层中,您必须在其中使用集合:IList<MemberAgreement>.

其他选项是使用6.9。三元协会。提取并应用于网络:

public class Network
{
  ...
  public virtual IDictionary<State, Template> StateTemplates { get; set; }
}

<map name="States" table="Agreement" >
    <key column="NetworkId" />
    <index-many-to-many column="StateId" class="State" />
    <many-to-many column="TempalteId" class="Template" />
</map>

像这样流利:

HasMany(x => x.StateTemplates)
    .KeyColumn("NetworkId")
    .AsMap<State>("StateId")
    .AsTernaryAssociation("TemplateId");
于 2013-01-24T06:03:29.863 回答