Fluent Nhibernate - 映射组件集合(值对象)?

时间:2010-11-18 11:00:35

标签: nhibernate fluent-nhibernate

我目前正在使用这样的组件地图:

public class UserMapping
{
         public UserMapping()
         {
            Id(c => c.Id).GeneratedBy.HiLo("100");
            Map(c => c.UserName);
            Component(c => c.Country, CountryComponentMapping.Map);
         }
}


public sealed class CountryComponentMapping
{
    public static void Map(ComponentPart<Country> part)
    {
        part.Map(x => x.CountryName)
        part.Map(x => x.CountryAlpha2)
    }
}

我喜欢这个,因为我只需要在一个地方定义组件/值对象的映射。

我如何对组件集合使用相同的语义?(例如,假设我们想将其更改为用户实体上的国家/地区集合)

1 个答案:

答案 0 :(得分:7)

您可以将其映射为组件集合。不幸的是,HasFany()中没有重载.Fluent NHibernate中的Component()允许您指定要使用ComponentMap的派生类。您可以使用上述技术的修改。

public sealed class UserMap : ClassMap<User> {
    public UserMap() {
        Id(c => c.Id).GeneratedBy.HiLo("100");
        Map(x => x.Name);
        HasMany(x => x.Countries).Component(CountryComponentMapping.Map);
    }
}

public sealed class CountryComponentMapping {
    public static void Map(CompositeElementBuilder<Country> part) {
        part.Map(x => x.CountryName);
        part.Map(x => x.CountryAlpha2)
    }
}