1

コードの下に、顧客は複数の住所を持つことができます。 1対多の関係があります。私はFKとしてアドレステーブルに Fluent NHibernate:表記規則/ KeyColumn

が、私は」を追加しようとした「顧客」とはない「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

私は自分自身を自動マッピング使ったことがないが、唯一の「デフォルト」流暢なマッピング(自動マッピングではない)と一緒に使用ClassMapされていませんか?流暢なマッピングや自動マッピングを使いたいですか?

多対1のマッピングされていないにもかかわらず、1対多の逆の理由は何ですか?

Btw、その規約の目的は何ですか? PropertyRef()は絶対に必要でない限り使用しないでください(NHibernateはそれでいくつかの最適化を行うことができません)。

+0

あなたの答えは答えよりもコメントです。目的は新しいデータベースではない。 –

+0

@ Kris-Iええ、申し訳ありませんが、コメントがあったはずです。 Btw、私は私の答えを編集した、あなたは流暢なマッピングと自動マッピングを混在させることに最も問題があります。 – cremor