Fluent-Nhibernate对象的HasMany属性引用

时间:2012-03-13 15:30:05

标签: nhibernate fluent-nhibernate

推荐有很多线索。然而,实体通过代理标识符相关联。在我的推荐实体中,我最终必须添加一个映射到agent_id列的整数属性,以使映射正常工作。

如果我从实体中删除AgentID属性并在“Agent”对象上执行映射,如下所示:

    HasMany(x => x.Leads)
        .AsBag()
        .KeyColumn("Agent_Id")
        .PropertyRef("Agent");

我遇到了错误:

  

对象与目标类型不匹配。

     

描述:执行期间发生了未处理的异常   当前的网络请求。请查看堆栈跟踪了解更多信息   有关错误的信息以及它在代码中的起源。

     

异常详细信息:System.Reflection.TargetException:Object没有   匹配目标类型。

我想,我在问这是否是一个可接受的解决方案?额外的AgentID属性不会在属性引用中的任何位置使用。是否有另一种方法可以在必须更改域模型的情况下执行此映射,因为此时无法更改。

工作映射

public class Referral
{
    public virtual int Id { get; set; }
    public virtual int AgentID { get; set; }
    public virtual Agent Agent { get; set; }
    public virtual int? PositionNumber { get; set; }
    public virtual DateTime? LastReferralDate { get; set; }
    public virtual Account Account { get; set; }

    public virtual IEnumerable<Lead> Leads { get; set; }
}

public ReferralMap()
{
    Table("Referral");
    LazyLoad();
    Id(x => x.Id).GeneratedBy.Identity().Column("Id");
    Map(x => x.PositionNumber).Column("PositionNumber");
    Map(x => x.LastReferralDate).Column("LastReferralDate");
    Map(x => x.AgentID).Column("Agent_ID");
    References(x => x.Agent).Column("Agent_ID");
    References(x => x.Account).Column("Account_id");

    HasMany(x => x.Leads)
        .AsBag()
        .KeyColumn("Agent_Id")
        .PropertyRef("AgentID");

}

1 个答案:

答案 0 :(得分:1)

我猜是因为你有

public LeadMap()
{
    Id(l => l.AgentId).Column("Agent_Id");
}

而不是

public LeadMap()
{
    CompositeId().KeyReference(l => l.Agent, "Agent_Id");
}