流利的NHibernate:Conventions / KeyColumn

时间:2011-10-18 06:53:51

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

在代码下方,客户可以拥有多个地址。有一对多的关系。我希望在地址表中将FK作为名为“Customer”的字段而不是“Customer_id”

我试图补充: .KeyColumn("Customer")>没有变化

我试图用来改变ForeignKeyConvention没有变化。

有什么想法吗?

public class CustomerMap : ClassMap<Customer>
{
    protected CustomerMap()
    {
        Id(x => x.Id).Not.Nullable();
        Map(x => x.FirstName).Not.Nullable().Length(25);
        Map(x => x.LastName);
        HasMany<Address>(x => x.Addresses)                
            .KeyColumn("Customer")
            .AsSet()
            .Inverse()
            .Cascade.AllDeleteOrphan();
    }
}

public class AddressMap : ClassMap<Address>
{
    public AddressMap()
    {
        Id(x => x.Id);
        Map(x => x.City).Not.Nullable().Length(100);
    }
}

public class ForeignKeyReferenceConvention : IHasManyConvention
{
    public void Apply(IOneToManyCollectionInstance instance)
    {
        instance.Key.PropertyRef("EntityId");
    }
}

public void DBCreation()
{
    FluentConfiguration config = Fluently.Configure()
        .Database(MsSqlConfiguration.MsSql2008.ConnectionString("...."))
        .Mappings(m =>
            m.AutoMappings
                .Add(AutoMap.AssemblyOf<Customer>())
                .Add(AutoMap.AssemblyOf<Address>()
                    .Conventions.Setup(c => c.Add<ForeignKeyReferenceConvention>())
                    )
                );

    config.ExposeConfiguration(
              c => new SchemaExport(c).Execute(true, true, false))
         .BuildConfiguration();
}

1 个答案:

答案 0 :(得分:0)

我自己从未使用自动化,但ClassMap仅用于“默认”流畅映射(不是自动化)?您想使用流畅的映射还是自动映射?

为什么你的一对多倒数虽然你没有多对一的边映射?

不过,那个会议的目的是什么?除非绝对需要,否则不应使用PropertyRef()(NHibernate不能对其进行一些优化)。