在代码下方,客户可以拥有多个地址。有一对多的关系。我希望在地址表中将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();
}
答案 0 :(得分:0)
我自己从未使用自动化,但ClassMap
仅用于“默认”流畅映射(不是自动化)?您想使用流畅的映射还是自动映射?
为什么你的一对多倒数虽然你没有多对一的边映射?
不过,那个会议的目的是什么?除非绝对需要,否则不应使用PropertyRef()
(NHibernate不能对其进行一些优化)。