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 异常