【问题标题】:fluent nhibernate mapping issue流畅的休眠映射问题
【发布时间】:2011-10-24 01:20:48
【问题描述】:

我有两个对象 Customer_policy 和 policy_maturity。

public class Customer_policy
{
    public virtual String policy_no { get; set; }
    public virtual DateTime maturity_date { get; set; }
    public virtual Boolean matured_status { get; set; }
}

public class Policy_maturity
{
    public virtual string policy_no { get; set; }
    public virtual string customer_id { get; set; }
    public virtual float maturity_amt { get; set; }
    public virtual string policy_type { get; set; }
    public virtual DateTime pay_date { get; set; }
}

当客户创建策略时,Customer_policy 会被填充,但 Policy_maturity 应该保持为空(我已经这样做了)。当政策成熟时,我想在 Policy_maturity 中插入一行并更新相应 Customer_policy 的成熟状态字段。我应该做什么类型的映射,这样插入和更新只需点击一次数据库就可以完成???感谢您的建议。

【问题讨论】:

    标签: nhibernate mapping fluent


    【解决方案1】:

    您需要让 NHibernate 批处理这两个 DML 查询。请查看this blog post,了解如何在 NHibernate 中使用批处理的详细说明。

    将这两个操作包装在一个事务中(如博文中的示例所做的那样)也是一个好主意。

    【讨论】:

      【解决方案2】:

      一个建议:

      public class CustomerPolicy
      {
          public virtual String PolicyNumber { get; private set; }
          public virtual DateTime MaturityDate { get; set; }
          public virtual PolicyMaturity Maturity { get; private set; }
      
          public virtual Boolean HasMatured { get { return Maturity != null; } }
      
          public virtual void DoMature(Customer customer, float maturity_amt, string policyType, DateTime payDate)
          {
              DoMature(new PolicyMaturity
              {
                  Customer = customer,
                  MaturityAmt = maturity_amt,
                  PolicyType = policyType,
                  PayDate = payDate,
              });
          }
          /*public*/ virtual void DoMature(PolicyMaturity maturity)
          {
              Maturity = maturity;
              MaturityDate = DateTime.Today;
          }
      }
      
      public class PolicyMaturity
      {
          public virtual String PolicyNumber { get; private set; }
          public virtual CustomerPolicy Policy { get; set; }
          public virtual Customer Customer { get; set; }
          public virtual float MaturityAmt { get; set; }
          public virtual string PolicyType { get; set; }
          public virtual DateTime PayDate { get; set; }
      }
      
      class CustomerPolicyMap : ClassMap<CustomerPolicy>
      {
          public CustomerPolicyMap()
          {
              Id(cp => cp.PolicyNumber).GeneratedBy.Assigned();
      
              Map(cp => cp.MaturityDate);
              HasOne(cp => cp.Maturity);
          }
      }
      
      class PolicyMaturityMap : ClassMap<PolicyMaturity>
      {
          public PolicyMaturityMap()
          {
              Id(cp => cp.PolicyNumber).GeneratedBy.Foreign("Policy");
      
              HasOne(cp => cp.Policy);
      
              References(cp => cp.Customer);
              Map(cp => cp.MaturityAmt);
              Map(cp => cp.PayDate);
              Map(cp => cp.PolicyType);
          }
      }
      

      那么如果你保存更新后的 Customerpolicy NHibernate 应该批处理这两个更新

      【讨论】:

        猜你喜欢
        • 2011-11-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-29
        • 2011-01-31
        • 1970-01-01
        相关资源
        最近更新 更多