Преобразование отношений «многие к одному» NHibernate от абстрактных базовых классов к объединенным подклассам - PullRequest
0 голосов
/ 19 ноября 2010

У меня проблема с отображением отношения «многие к одному» из отображения абстрактного базового класса в конкретный объединенный подкласс. Пример:

public abstract class Entity
{
    public virtual Guid ID {get; set;}
    public virtual string Name {get;set;}
    public virtual User OwnerUser {get; set;}
}

public class User : Entity
{
    public virtual string UserName {get; set;}
}

Как вы можете видеть здесь, у меня есть базовый абстрактный класс для всех моих объектов базы данных. Я сопоставляю эти классы с классом Entity в качестве класса абстрактного сопоставления и с User в качестве подкласса union. При создании объекта конфигурации не выдается никаких ошибок, и схема экспортируется просто отлично. Тем не менее, поле для OwnerUser просто не будет отображаться в базе данных для всех конкретных классов. Вот пример того, как выглядит отображение

<class entity-name="Entity" name="Entity" abstract="true">
    <id name="ID" type="guid">
       <generator class="guid.comb"/>
    </id>
    <property name="Name" />
    <many-to-one name="OwnerUser" column="ID" entity-name="User" />
</class>

<union-subclass name="User" entity-name="User" extends="Entity">
    <property name="UserName" />
</union-subclass>

Я также использую экземпляр Oracle XE в качестве базы данных. Если этой информации недостаточно для правильного ответа на вопрос, дайте мне знать, и я добавлю, что могу.

В худшем случае я просто явно добавлю отношение «многие к одному» для всех конкретных объектов, но это не самое элегантное решение, и я думаю, что предложенное мной должно сработать. Я не смог найти каких-либо конкретных примеров этого на трубках, которые питают различные сети, и я не нашел ничего в документации, явно заявляющей, что это недопустимый вариант использования, хотя я мог что-то пропустить. Это не было бы в первый раз: - /

Любые ответы на этот вопрос с благодарностью. Спасибо за ваше время.

1 Ответ

0 голосов
/ 19 ноября 2010

Ух ты, просто ... вау.

Вместо того, чтобы пытаться удалить этот пост, я оставлю его для другого непритязательного nhibernate-нуба, чтобы найти один день, так как я не смог найти никаких вопросов по поводу этого конкретного варианта использования.

Дело в том, что вы можете сделать это без проблем. Моя проблема заключалась в том, что я указывал идентификатор для атрибута столбца в элементе сопоставления «многие к одному». По какой-то странной причине я подумал, что это столбец, на который ссылается внешний ключ (на самом деле это свойство ref, если я не ошибаюсь). Этот атрибут фактически указывает имя столбца в таблице, которая содержит ссылку (д'оо!). Удивительно, но NHibernate с радостью отобразит несколько отображаемых элементов на одно имя столбца без предупреждения. Я не пытаюсь винить их, возможно, в этом случае используется возможность переопределения некоторого типа для полиморфного производного класса.

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

Спасибо всем, кто нашел время, чтобы проверить этот пост.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...