2009-10-24 103 views
2

我在Fluent NHibernate中遇到映射错误。为什么当我明确指定列时仍然在寻找_id?流利的NHibernate映射错误(Id列)

Invalid column name 'Account_id'. 
[GenericADOException: could not initialize a collection: [ProtoStack.Business.Entities.Account.LedgerEntries#1][SQL: SELECT ***ledgerentr0_.Account_id*** as Account5_1_, ledgerentr0_.Id as Id1_, ledgerentr0_.Id as Id43_0_, ledgerentr0_.LedgerEntryDate as LedgerEn2_43_0_, ledgerentr0_.Amount as Amount43_0_, ledgerentr0_.AccountId as AccountId43_0_ FROM dbo.LedgerEntry ledgerentr0_ WHERE ledgerentr0_.Account_id=?]] 

我明确指定该列是“AccountId”。

public class AccountMap : ClassMap<Account> 
{ 
    public AccountMap() 
    { 
     Table("dbo.Account"); 
     Id(x => x.Id) 
      .Column("Id"); 
     Map(x => x.Code); 
     Map(x => x.Name); 
     Map(x => x.Description); 
     Map(x => x.Category); 
     References(x => x.Group) 
      .Column("AccountGroupId"); 
     HasMany(x => x.LedgerEntries) 
      .Inverse() 
      .Cascade.All(); 
    } 
} 

public class LedgerEntryMap : ClassMap<LedgerEntry> 
{ 
    public LedgerEntryMap() 
    { 
     Table("dbo.LedgerEntry"); 
     Id(x => x.Id) 
      .Column("Id"); 
     References(x => x.Account) 
      .Column("AccountId"); 
     Map(x => x.LedgerEntryDate); 
     Map(x => x.Amount); 
    } 
} 

我错过了什么吗?

回答

5

我的不好。我错过了KeyColumn。

public class AccountMap : ClassMap<Account> 
{ 
    public AccountMap() 
    { 
     Table("dbo.Account"); 
     Id(x => x.Id) 
      .Column("Id"); 
     Map(x => x.Code); 
     Map(x => x.Name); 
     Map(x => x.Description); 
     Map(x => x.Category); 
     References(x => x.Group) 
      .Column("AccountGroupId"); 
     HasMany(x => x.LedgerEntries) 
      .KeyColumn("AccountId") 
      .Inverse() 
      .Cascade.All(); 
    } 
} 

现在就工作。

+0

我得到了这个错误,我也忘了添加KeyColumn,但是直到运行我的应用程序才得到错误。我写了一些非常特殊的单元测试,保存并删除到数据库,这些测试*仍然通过*没有指定KeyColumn。我不知道该为谁负责 – PandaWood 2012-12-10 04:04:22