Недопустимый индекс N для этой коллекции SqlParameterCollection с Count=N, только если связанная таблица имеет нулевую запись

У меня есть довольно сложная сущность, которая не сохраняется, когда в определенной таблице базы данных отсутствует запись. Когда запись существует, сущность сохраняется правильно. Когда записи нет, я получаю исключение:

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;

Чего мне не хватает в моих связках, что могло бы вызвать это исключение? Есть ли другая часть этой проблемы, которую я не вижу?

5
задан Community 23 May 2017 в 12:03
поделиться