Fluent NHibernate:约定/键列
在代码下面,客户可以有多个地址。有一对多的关系。我希望地址表中的FK字段名为Customer,而不是Customer\u id 我试图补充: .KeyColumnCustomer>无变化 我试图用改变外国人的习惯,但没有改变 有什么想法吗Fluent NHibernate:约定/键列,nhibernate,orm,fluent-nhibernate,nhibernate-mapping,fluent-nhibernate-mapping,Nhibernate,Orm,Fluent Nhibernate,Nhibernate Mapping,Fluent Nhibernate Mapping,在代码下面,客户可以有多个地址。有一对多的关系。我希望地址表中的FK字段名为Customer,而不是Customer\u id 我试图补充: .KeyColumnCustomer>无变化 我试图用改变外国人的习惯,但没有改变 有什么想法吗 public class CustomerMap : ClassMap<Customer> { protected CustomerMap() { Id(x => x.Id).Not.Nullable();
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();
}
我自己从来没有使用过自动映射,但是ClassMap不是只用于默认的fluent映射而不是自动映射吗?您想使用fluent映射还是自动映射 为什么你的一对多反转,虽然你没有多对一的映射
顺便问一句,这个大会的目的是什么?除非绝对需要,否则不应使用PropertyRef。NHibernate无法对此进行一些优化。您的答案与其说是答案,不如说是评论。目的是匹配一个非新数据库。@Kris-I是的,对不起,应该是一个注释。顺便说一句,我已经编辑了我的答案,你很可能在混合流畅映射和自动映射方面有问题。