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

UpT*_*eek 5 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)
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

Jam*_*acs 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)
    }
}
Run Code Online (Sandbox Code Playgroud)