2009-10-20 58 views
3

我是一个完整的初学者,我遇到了一个可能是我自己的错误的问题。AutoMap.AssemblyOf映射整个命名空间

我有一个包含3个类的名称空间。实体,实体版本和属性。类之间没有涉及继承。

我试图只映射实体类,但是会发生的是名称空间中的所有类都被映射。我在这里做错了什么?

private static ISessionFactory CreateSessionFactory() 
{ 
    return Fluently.Configure() 

     .Database(
       MsSqlConfiguration.MsSql2005 
       .ConnectionString("Data Source=MSCHOPMAN\\SQLEXPRESS;Initial Catalog=framework;Integrated Security=SSPI"))    
     .Mappings(m => 
     { 
      m.AutoMappings.Add(
       AutoMap.AssemblyOf<Entity>() 
       //.IgnoreBase<Entity>() 
       .Where(t => t.Namespace == "Modules.Business.Entities") 
      ) 
      .ExportTo("c:\\temp"); 
     } 
     ) 

     .ExposeConfiguration(BuildSchema) 
     .BuildSessionFactory(); 
} 

与实体类:

using System; 
using System.Collections; 
using System.Collections.Generic; 
using System.Data; 

using Modules.Data; 

namespace Modules.Business.Entities 
{ 
    public class Entity 
    { 
     public virtual int Id { get; set; } 
     public virtual int ParentId { get; set; } 
     public virtual int TypeId { get; set; } 
     //public virtual IList<EntityVersion> Versions { get; set; } 

     public Entity() 
     { 
      //Versions = new List<EntityVersion>(); 
     } 
    } 
} 

回答

3

这条线:

.Where(t => t.Namespace == "Modules.Business.Entities") 

指示FluentNHibernate映射Modules.Business.Entities命名空间中的所有对象。如果你想只映射一个特定的类型,你可以尝试指定它的名字:

.Where(t => t == typeof(Entity)) 
+0

嗨达林,谢谢你的回答。也许我错过了在第一行中传递的实体类型的整个点: AddAssembly 表示/用于什么? :) m.AutoMappings.Add(AutoMap.AssemblyOf ).Where(t => t.Namespace ==“Modules.Business.Entities”)) – 2009-10-20 19:23:53

+0

它表示映射组件中定义的所有类型,其中实体类型被定义(希望它是有道理的)。 – 2009-10-20 19:52:10

+0

这并不意味着映射实体类型。 – 2009-10-20 19:52:41