2011-08-06 117 views
0

今天我一直在設置流利的nhibernate。 我碰到了ID和當我映射到另一個類, 我不得不指定類映射到什麼id。 由於我的id始終是class name + id。流利Nhibernate修改默認ID

nhibernate具有默認類名+「_」+ id。

所以當我要創建的映射如下:

ID(X => x.MenuItemId, 「MenuItemId」);

我如何覆蓋的設置是因爲我需要爲此和我只能使用映射爲

ID(X => x.MenuItemId)

的問題確實只有拿出我做接合在另一個類例如

實體菜單joing上菜單項和我使用

的hasMany(X => x.MenuItems)。類(typeof運算(菜單))

回答

0

發現此問題: 即解決方案。

標識

的automapper被堅持己見,它期望被設計爲以特定的方式你的類;如果它們不是,那麼它將無法在沒有一點幫助的情況下自動映射它們。 automapper期望你的身份被命名爲Id,如果他們不是,它不會找到它們。

您可以通過在自動映射配置中重寫IsId方法來修改自動映射器發現標識的方式。這個方法將會被你的實體中已經被ShouldMap(成員)標準接受的所有成員調用;無論哪個成員您返回true都會被映射爲身份。

public override bool IsId(Member member) 
{ 
    return member.Name == member.DeclaringType.Name + "Id"; 
} 

該示例將匹配以其實體命名的任何id,例如CustomerId。

,並調用它:

return Fluently.Configure() 
       .MsSql2008 
       .ConnectionString(c => c.FromConnectionStringWithKey("database")) 
      .ShowSql() 
       .ProxyFactoryFactory("NHibernate.ByteCode.LinFu.ProxyFactoryFactory, NHibernate.ByteCode.LinFu")) 
       .Mappings(x => x.FluentMappings 
.AddFromAssembly(
Assembly.GetExecutingAssembly()) 
.Conventions.AddFromAssemblyOf<Location.IdConvention>()) 
.BuildSessionFactory(); 

並且設置了ID CONVENCION後

public class IdConvention : IIdConvention 
    { 
     public void Apply(IIdentityInstance identityInstance) 
     { 
      identityInstance.Column(identityInstance.EntityType.Name + "Id"); 
     } 
    }