1

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

1 回答 1

0

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

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

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

于 2011-10-18T07:13:08.773 回答