Я хочу, чтобы это отображение работало:
Map(x => x.First, "First_ID");
Map(x => x.Second, "Second_ID")
References(x => x.SomeProperty)
.Access.AsCamelCaseField(Prefix.Underscore)
.Nullable()
.NotFound.Ignore()
.WithColumns("First_ID", "Second_ID")
.LazyLoad();
Это не работает, когда я хочу вставить объект в базу данных.Это говорит: Неверный индекс N для этой SqlParameterCollection с Count = N error
Я нашел ответ на вопрос здесь: http://devlicio.us/blogs/derik_whittaker/archive/2009/03/19/nhibernate-and-invalid-index-n-for-this-sqlparametercollection-with-count-n-error.aspx
Но ответ говорит, что мне нужно удалить приведенный ниже код, чтобы заставить вставку работать
Map(x => x.First, "First_ID");
Map(x => x.Second, "Second_ID")
Проблема в том, что я не могу удалить сопоставления, потому что таким образом моя сущность не может быть извлечена из базы данных.Это чем говорит, что он не может найти первый и второй столбцы в таблице.Я понимаю, почему это происходит, но есть ли способ решить проблему, не удаляя сопоставления?Просто чтобы изменить что-то в этом коде:
References(x => x.SomeProperty)
.Access.AsCamelCaseField(Prefix.Underscore)
.Nullable()
.NotFound.Ignore()
.WithColumns("First_ID", "Second_ID")
.LazyLoad();
Например, не использовать литералы для имен столбцов, но некоторый код, который «знает», что в этом свойстве сопоставления First сопоставляется с «First_ID» без явного указанияимя столбца?
PS Я пытался использовать
References(x => x.SomeProperty)
.Access.AsCamelCaseField(Prefix.Underscore)
.Nullable()
.NotFound.Ignore()
.WithColumns(x => x.First, x => x.Second)
.LazyLoad();
Не работает.
Другое решение для удаленных сопоставлений - изменить запрос, который получает сущность из БД, но в этом случае мне нужно добавить дополнительное объединение - это глупо, потому что у меня есть столбец в моей собственной таблице, зачем мнесделать соединение, а затем добавить некоторые ограничения, когда мне не нужно это соединение.