Получить дочерний от родительского идентификатора, используя NHibernate - PullRequest
1 голос
/ 06 июля 2010

У меня есть класс Child, который не имеет свойства ParentId, но имеет необходимый внешний ключ в базе данных. Я пытаюсь заставить детей использовать ParentId с помощью NHibernate, но выдает ошибку, в которой говорится, что не удалось разрешить свойство ParentId.

public class Parent
{
     public int ParentId{ get; set; }

     public string Name{ get; set; }
}

public class Child
{
     public int ChildId{ get; set; }

     public string Name{ get; set; }
}

<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
                   assembly="SomeAssembly"
                   namespace="SomeAssembly.SomeNamespace">
    <class name="Parent" lazy="false" table="Parents">
        <id name="ParentId">
            <generator class="native" />
        </id>
        <property name="Name" />
    </class>

    <class name="Child" lazy="false" table="Children">
        <id name="ChildId">
            <generator class="native" />
        </id>
        <property name="Name" />
    </class>
</hibernate-mapping>

Ответы [ 3 ]

1 голос
/ 06 июля 2010

Использовать собственный SQL-запрос :

return session.CreateSQLQuery("select * from ChildTable where ParentId = ?")
    .AddEntity(typeof(Child))
    .SetInt32(0, parentId)
    .UniqueResult<Child>();
1 голос
/ 07 июля 2010

Чтобы использовать столбец с NHibernate без свойства в вашем доменном классе, используйте может использовать менее известный noop-доступ: http://ayende.com/Blog/archive/2009/06/10/nhibernate-ndash-query-only-properties.aspx.

Примерно так (не пробовал сам):

<property name="ParentId" access="noop" />

Могу поспорить, что вы можете сделать это более изящным, сопоставив вместо этого тип Parent типа «многие к одному».

1 голос
/ 06 июля 2010

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

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