为什么我总是在第二次查询时收到错误,无论如何

时间:2014-10-24 08:53:50

标签: c# nhibernate fluent-nhibernate

所以我使用流利的nhibernate。 我有3个表和3个映射文件: 具有PersonId和BankId的PersonAccount,以及对PersonAccount一无所知的Bank和Person表。 在我的表单中,我选择人员和银行名称,然后搜索这些表格以填充我的personaccount。 我做了这样的映射: PersonMap

HasMany(x => x.PersonAccounts).KeyColumn("PERSONID").Inverse();

BankMap

 HasMany(x => x.PersonAccounts).KeyColumn("BANKID").Inverse();

PersonAccountMap

 References(x => x.Person).Column("PERSONID").Not.Nullable();
 References(x => x.Bank).Column("BANKID").Not.Nullable();

最后,这是奇怪事情开始发生的代码。

[Activity]
public PersonAccount Save(PersonAccount PersonAccount)
{
    if (NullSafeString.IsNotEmpty(PersonAccount.PersonName))
    {
        PersonService ps = new PersonService();
        Person person = ps.GetForName(PersonAccount.PersonName);
        if (person != null)
        {
            person.PersonAccounts.Add(PersonAccount);
            PersonAccount.Person = person;
        }
    }
    if (NullSafeString.IsNotEmpty(PersonAccount.BankName))
    {
        BankService bs = new BankService();

        Bank bank = bs.GetBankForName(PersonAccount.BankName);
        if (bank != null)
        {
            bank.PersonAccounts.Add(PersonAccount);
            PersonAccount.Bank = bank;
        }
    }
    base.Save(PersonAccount);
    return PersonAccount;
}

所以,在这样的代码中,我在

上收到错误

bs.GetBankForName(PersonAccount.BankName);

当我更改搜索顺序时,当我第一次查找Banks然后查找人员时,我收到错误

ps.GetForName(PersonAccount.PersonName);

以下是此服务方法的实现(对于Person而言)

  [Activity]
    public Bank GetBankForName(string bankName)
    {
        Bank bank = Session.NHibernateSession.Query<Bank>().Where(x => x.BankName == bankName).FirstOrDefault();
        return bank;
    }

被修改: 错误是::违反了完整性约束(ISVDV.SYS_C008355) - 找不到父密钥

0 个答案:

没有答案