所以我使用流利的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) - 找不到父密钥