У меня есть довольно сложная сущность, которая не сохраняется, когда в определенной таблице базы данных отсутствует запись. Когда запись существует, сущность сохраняется правильно. Когда записи нет, я получаю исключение:
Invalid index N for this SqlParameterCollection with Count=N
После прочтения кучи решений, найденных через Google и наиболее близких вопросов на Stack Overflow:
Я думаю, что моя проблема связана с тем, как у меня настроены файлы отображения. Сущность Customer имеет ссылку на сущность Person. Person отображается на таблицу, к которой у нас есть доступ на чтение, но не на запись. Именно когда запись для сущности Person не существует, я генерирую исключение. Если запись существует, проблем не возникает. Я установил для ссылки на Person из customer значение Nullable()
. Я также дважды проверил, что у меня нет свойства, сопоставленного дважды с любой сущностью.
Вот то, что я считаю необходимой информацией о сопоставлении, но при необходимости могу предоставить больше:
Customer
//more mapping code...
References(x => x.Person, "snl_id").Nullable();
//more mapping code...
Person
//more mapping code...
ReadOnly();
Id(x => x.SnlId).Column("SNL_ID");
//more mapping code...
Чтобы еще больше усложнить ситуацию, у нас есть некоторый болезненный код, чтобы заставить NHibernate работать лучше, когда Person не существует. Я не уверен, что он применим здесь, но подумал, что он достаточно уместен, чтобы включить его в мой вопрос. Мы используем приведенный ниже код, потому что без него NHibernate JIRA будет создавать тонны запросов. Это решение описано в этом ответе на Stack Overflow.
Свойство персоны клиента
public virtual Person Person
{
get
{
try
{
var snlId = per.Name;
return per;
}
catch
{
return null;
}
}
set
{
per = value;
}
}
private EPerson per;
Чего мне не хватает в моих связках, что могло бы вызвать это исключение? Есть ли другая часть этой проблемы, которую я не вижу?