1

在代碼下面,客戶可以有多個地址。有一個一對多的關係。我會在地址表中作爲喜歡FK一個名爲「客戶」,而不是「CUSTOMER_ID」字段流利NHibernate:約定/ KeyColumn

我」嘗試添加: .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

我從未使用過自動映射自己,但不ClassMap只能用「默認」流利映射(不自動映射)使用?你想使用流利的映射或自動映射?

爲什麼你的一對多反轉,雖然你沒有多對一的一面映射?

順便說一句,那個約定的目的是什麼? PropertyRef()不應該使用,除非絕對需要(NHibernate不能做一些優化)。

+0

您的回答不僅僅是回答。目的是匹配一個不是新的數據庫。 –

+0

@ Kris-I是的,對不起,應該是一個評論。順便說一句,我編輯了我的答案,你最有可能混合流利的映射和自動映射的問題。 – cremor