开发者

How to Map a ValueObject Collection with Foreign Keys in FluentNHibernate

开发者 https://www.devze.com 2023-01-28 15:52 出处:网络
I\'ve been looking all over for an example of this, but it seems pretty uncommon.Hopefully some NHibernate guru will know.

I've been looking all over for an example of this, but it seems pretty uncommon. Hopefully some NHibernate guru will know.

I have the following class which, by my understanding of Value Objects, is a Value Object. Assume every user has the ability to assign one or m开发者_运维技巧ore tags to any Question (think Stack Overflow). The Tags don't need a primary key, but they do hold references to the User and Question, unlike most of the examples of ValueObjects I see out there.

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; }
}

Anyway, I am getting the following error:

{"The entity 'Tag' doesn't have an Id mapped. Use the Id method to map your identity property. For example: Id(x => x.Id)."}

I have the following Fluent NHibernate mapping for User and Question:

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);
            });
        }

As always, any thought greatly appreciated.

Late Update: Okay, so, maybe this isn't a value object. It doesn't need an identity, but I guess it's not something that could be used in multiple places, either. Any way to handle this without forcing a useless Id field on my object?


Try this:

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);
        });
    }

but you cant query (list all) tags then because its a value object.

0

精彩评论

暂无评论...
验证码 换一张
取 消