Fluent NHibernate:约定/KeyColumn

Posted

技术标签:

【中文标题】Fluent NHibernate:约定/KeyColumn【英文标题】:Fluent NHibernate : Conventions / KeyColumn 【发布时间】:2011-10-18 06:53:50 【问题描述】:

在代码下方,一个客户可以有多个地址。存在一对多的关系。我想在地址表中作为 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】:

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

尽管您没有多对一的一面映射,但为什么您的一对多逆?

顺便说一句,该约定的目的是什么?除非绝对需要,否则不应使用PropertyRef()(NHibernate 无法对此进行一些优化)。

【讨论】:

您的回答更像是评论而不是答案。目的是匹配一个不是新的数据库。 @Kris-I 是的,对不起,应该是评论。顺便说一句,我已经编辑了我的答案,你很可能在混合流利映射和自动映射时遇到问题。

以上是关于Fluent NHibernate:约定/KeyColumn的主要内容,如果未能解决你的问题,请参考以下文章

Fluent NHibernate:约定/KeyColumn

Fluent NHibernate:如何使用约定在组件中指定列名以供参考?

NHibernate 2 + Fluent Nhibernate 中等信任

NHibernate + Fluent NHibernate 异常

用 Fluent Nhibernate 定义 NHibernate 过滤器的语法?

Fluent NHibernate and Mysql,SQLite