2009-11-27 86 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标识{获得; } }

我试过这最初与获得和设置,但后来我会有问题,因为我的抽象类使用受保护的设置,并不能从接口继承。将接发器从接口中移出似乎现在正在工作,希望它不会引入任何其他问题。