如何映射Fluent NHibernate中另一个表的字符串集合?

时间:2015-06-03 11:07:53

标签: fluent-nhibernate nhibernate-mapping fluent-nhibernate-mapping

我有一个实体:

public class Foo
{
    public virtual int Id;
    public virtual IEnumberable<string> Bars;
}

及其映射:

public class FooMapping : ClassMap<Foo>
{
    public FooMapping()
    {
        Table("foo_table_in_database");
        Id(x => x.Id, "Id");
        HasMany(x => x.Bars)
                .AsList()
                .Table("bars_table_in_db")
                .Element("BarId", m =>
                {                    
                    m.Type<string>();
                });
    }
}

在预期结果的实体内部返回了一个异常:(

base = {“无法初始化集合:[Loya.Services.CouponsWeb.Promotion.LoyCouponCustomerGroups#2] [SQL:SELECT loycouponc0_.Promotion_id as Promotion3_0_,loycouponc0_.LoyCustomerGroupId as LoyCusto1_0_,loycouponc0_.Index as Index0_来自loy_promotion__cu ...

数据库表:

foo_table :* Id,其他属性

bar_table :* FooId,* BarId

我的目标是在我的Foo中获得BarId(字符串)列表。 如何正确映射?

1 个答案:

答案 0 :(得分:1)

我认为您可能需要指定KeyColumn。我在我的一个解决方案中做了类似的事情,我会将上面的实体映射如下......

        mapping.HasMany(x => x.Bars)
            .Schema("Schema")
            .Table("FooBars")
            .Element("Bar")
            .KeyColumn("FooID")
            .ForeignKeyConstraintName("FK_FooBar_Foo")
            .Not.Inverse()
            .Cascade.All()
            .Fetch.Select();

这将提供一个名为Schema.FooBars的表格。它将包含FooID列(返回Foo表的外键)和Bar列,其中包含Bars集合中的值。