【问题标题】:Join to a Table using two non-FK columns with Fluent NHibernate使用 Fluent NHibernate 使用两个非 FK 列加入表
【发布时间】:2010-09-16 21:05:51
【问题描述】:

我正在使用 Fluent NHibernate,我有两个表:

 BusinessPlan [Id, Year, CustomerCode]

 PreviousYearData [Id, Year, CustomerCode, MoreFieldsForData]

在我的域中,我想将 PreviousYearData 加入 BusinessPlan 以使实体如下所示:

public class BusinessPlan {
    public Guid Id { get; set; }
    public int Year { get; set; }
    public string CustomerCode { get; set; }
    public PreviousYearData PreviousYearData {get; set;}
}

public class PreviousYearData {
    public Guid Id { get; set; }
    public int Year { get; set; }
    public string CustomerCode { get; set; }
    // many more fields
}

PreviousYearData 表中的数据在创建业务计划之前的年初预填充,因此我不知道业务计划的 Id 是什么,也无法创建正常的外键。我想我想做的是根据 Year 和 CustomerCode 两列将 PreviousYearData 加入到 BusinessPlan。使用 Fluent NHibernate 可以做到这一点吗?有没有其他更有意义的方法来解决这个问题?

【问题讨论】:

    标签: nhibernate fluent-nhibernate architecture


    【解决方案1】:

    我想这个或类似的东西应该适合你:

            HasMany(x => x.PreviousYearDatas )
                .Access.AsCamelCaseField(Prefix.Underscore)
                .WithKeyColumns("YEAR", "CUSTOMER_CODE")
                .LazyLoad();
    

    你会有收藏,但你会得到你想要的。

    还有另一种结构:

            HasMany( 
                // some mapping but includes one foreign key - say customer code
                .Where( "YEAR = 2010" )
    

    这可能是最好的选择。我不认为岁月经常变化:)

    【讨论】:

      【解决方案2】:

      我不明白为什么在 BusinessPlan 表中存在外键问题:PreviousYearDataId

      在 BusinessPlan 映射中只需添加:

      References(x => x.PreviousYearData )
        .Column("PreviousYearDataId")
      

      【讨论】:

      • 是的。如果先填充 PreviousYearData 表,为什么 BusinessPlan 表没有对应的 PreviousYearData 记录的 ID?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多