nhibernatefluent-nhibernateaggregaterootvalue-objects

FluentNhibernate Map ValueObject


I have the following use case:

public class Object {
  long Id
   ...
  ISet<Tags> tags
}
        
public class Tag : IEquatable<Tag> {
  string Label;
}

Object is an Aggregate Root and Tag a Value Object. Both are stored in 2 different tables:

CREATE TABLE incident(id bigint, ...)
CREATE Table tag (object_id bigint References object(id), label varchar,...)

I'm trying to create the ClassMap using FluentNhibernate, which works well for object but I couldn't find a way to map it with Tag

public ObjectsMapping()
        {
            Id(x => x.Id).GeneratedBy.Assigned();
            Version(x => x.ObjectVersion).Column("object_version");         
            HasMany(x => x.Tags).Inverse().Cascade.All().KeyColumn("object_id");
        }

public TagsMapping()
        {
            CompositeId().KeyProperty(x => x.Label).KeyProperty(x => x.CreationTimestamp);
            Map(x => x.Label);
            Map(x => x.CreationTimestamp);
        }

Any idea how to map that an entity that has a oneToMany relation with a ValueObject from another table ?

Basically I'm looking for an equivalient of Set() in NHibernate

Thank you


Solution

  • I found the solution: In ObjectMapping:

     HasMany(x => x.Tags).Component(x => { x.Map(k => k.Label); }).Table("tag");