2009-11-27 37 views
2

我用流利的NHibernate的剛剛開始,遇到了以下問題試圖自動映射我的實體:如何讓流暢的NHibernate自動映射從繼承自接口的抽象類繼承的類?

public interface IDataEntity {} 

public abstract class PhysicalEntity : IDataEntity { 

     public virtual int Id { get; set; } 
     public virtual string Name { get; set; } 
} 

public class Mine : PhysicalEntity { 

     public virtual string MineString { get; set; } 
} 

private static ISessionFactory CreateSessionFactory() 
     { 
      return Fluently.Configure() 
       .Database(MsSqlConfiguration.MsSql2008 
       .ConnectionString(c => c.FromConnectionStringWithKey("CSMID_FNH"))) 
       .Mappings(m => 
       m.AutoMappings.Add(
       AutoMap.AssemblyOf<Mine>() 
       .Where(t => t.Namespace == "DAL.DomainModel" && t.IsClass && !t.Name.EndsWith("Attribute")) 
       .IgnoreBase<PhysicalEntity>())) 
       .ExposeConfiguration(BuildSchema) 
       .BuildSessionFactory(); 
     } 

現在,如果我刪除參考IDataEntity接口的自動映射作品。我嘗試在接口中插入一個ID字段,但這會導致NHibernate運行時錯誤,就像告訴自動映射忽略IDataEntity類型一樣。我在這裏錯過了什麼?我真的很喜歡我的域中的所有類從IDataEntity繼承。

回答

2

好的,所以我想我有一個答案。

我所要做的就是修改我IDataEntity像這樣:

公共接口IDataEntity { INT標識{獲得; } }

我試過這最初與獲得和設置,但後來我會有問題,因爲我的抽象類使用受保護的設置,並不能從接口繼承。將接發器從接口中移出似乎現在正在工作,希望它不會引入任何其他問題。