Я читаю данные из внешней организации, использующей Oracle.DataAccess через поставщика Oracle10g. В одной из таблиц есть составной идентификатор, состоящий из этих полей.
course:
institutioncode: "X11"
coursecode: "N100"
campuscode: "A"
entryyear: 2011
entrymonth: 10
Проблема заключается в том, что внешнему провайдеру разрешено иметь код кампуса, а не пустой. Это приводит к тому, что nHibernate возвращает коллекции, содержащие нулевые ссылки вместо сущностей курса.
Другие доменные объекты также будут использовать эти поля для ссылки на эту сущность курса, так что это фактически используется в качестве ключа, и я не могу легко переназначить использование суррогатного ключа.
Из источника в теге 3.1.0GA, проверка, вызывающая такое поведение, может быть найдена в Nhibernate.Type.ComponentType.Hydrate(IDataReader rs, string[] names, ISessionImplementor session, object owner)
. Это всегда отвергает возможность того, что свойство ключа может быть нулевым. Может ли это изменение сделать обнуляемость опцией для свойств ключа и ссылки на ключ?
В противном случае, как бы вы порекомендовали читать эти данные напрямую с помощью nHibernate?