свободная проблема отображения nhibernate - PullRequest
0 голосов
/ 10 августа 2011

У меня есть два объекта 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 и обновить поле matured_status соответствующей Customer_policy. Какой тип сопоставления я должен сделать так, чтобы вставка и обновление выполнялись, если попадать в базу данных только один раз ??? Спасибо за ваши предложения.

Ответы [ 2 ]

1 голос
/ 10 августа 2011

предложение:

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 необходимо пакетное обновление двух обновлений

0 голосов
/ 10 августа 2011

Вам нужно будет попросить NHibernate пакетировать два запроса DML. Посмотрите в этом блоге для подробного описания того, как использовать пакетирование в NHibernate.

Объединение двух операций в транзакции (как в примере из поста в блоге) также является хорошей идеей.

...