Как отобразить коллекцию ValueObject с помощью внешних ключей в FluentNHibernate - PullRequest
2 голосов
/ 04 декабря 2010

Я искал пример этого, но он кажется довольно необычным. Надеюсь, некоторые гуру NHibernate узнают.

У меня есть следующий класс, который, по моим представлениям о Объектах Значения, является Объектом Значения. Предположим, что каждый пользователь имеет возможность назначить один или несколько тегов для любого вопроса (например, переполнение стека). Тегам не нужен первичный ключ, но они содержат ссылки на пользователя и вопрос, в отличие от большинства примеров объектов ValueObjects, которые я вижу там.

public class Tag : ValueObject
{
     public virtual User User { get; set; }
     public virtual Question Question { get; set; }
     public virtual string TagName { get; set; }
}

public class User 
{
     public virtual IList<Tag> Tags { get; set; }
}

public class Question
{
     public virtual IList<Tag> Tags { get; set; }
}

В любом случае, я получаю следующую ошибку:

{"У сущности 'Tag' нет сопоставленного идентификатора. Используйте метод Id для сопоставления вашего свойства удостоверения. Например: Id (x => x.Id)."}

У меня есть следующее отображение Fluent NHibernate для пользователя и вопроса:

public void Override(AutoMapping<XXX> mapping)
        {
            mapping.HasMany(x => x.Tags).Component(c =>
            {
                c.Map(x => x.TagName);
                c.Map(x => x.Question);
                c.Map(x => x.User);
            });
        }

Как всегда, любая мысль очень ценится.

Позднее обновление: Хорошо, возможно, это не объект значения. Для этого не нужна личность, но я думаю, что это не то, что можно использовать в нескольких местах. Любой способ справиться с этим без принудительного использования бесполезного поля Id для моего объекта?

1 Ответ

0 голосов
/ 18 мая 2011

Попробуйте это:

public void Override(AutoMapping<XXX> mapping)
    {
        mapping.HasMany(x => x.Tags).AsBag().Component(c =>
        {
            c.Map(x => x.TagName);
            c.References(x => x.Question);
            c.References(x => x.User);
        });
    }

, но вы не можете запросить (перечислить все) теги тогда, потому что это объект значения.

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