2011-05-31 97 views
1

大家好,我的方案功能NHibernate 3映射复合场(自定义类型)

public class Permission 
{ 
    public virtual Function Function { get; set; } 
    public virtual Profile Profile { get; set; } 
} 

public class MapPermission : ClassMap<Permission> 
{ 
    public MapPermission() 
    { 
     Table("Permissions".ToUpper()); 
     CompositeId().KeyProperty(x => x.Function, "FunctionID").KeyProperty(x => x.Profile, "ProfileID"); 

    } 
} 

如果功能和简历有两个简单的映射实体。当我运行我有这个错误:

无法确定类型:Data.Model.Entities.Function,Data.Model,版本= 1.0.0.0,文化=中立,公钥=空,为列:NHibernate.Mapping .COLUMN(FunctionID)“}

是否有办法避免这种情况?最终我需要创建一个由两个自定义映射类制成compositeID一类。如果我使用compositeID用int字段它就像一个魅力

预先感谢

函数(如配置文件)映射

public class Function 
{ 
    public virtual int ID { get; set; } 
    public virtual string Name { get; set; } 
} 

public class MapFunction : ClassMap<Function> 
{ 
    public MapFunction() 
    { 
     Table("FUNCTIONS"); 
     Id(x => x.ID); 
     Map(x => x.Name); 
    } 
} 

回答

6

使用KeyReference,而不是KeyProperty

public class MapPermission : ClassMap<Permission> 
{ 
    public MapPermission() 
    { 
     Table("Permissions".ToUpper()); 
     CompositeId() 
      .KeyReference(x => x.Function, "FunctionID") 
      .KeyReference(x => x.Profile, "ProfileID"); 

    } 
} 
+0

你解决了我的一天。问题 – user756037 2011-05-31 12:16:03

+0

如果这解决了您的问题,请单击复选标记将其标记为答案。 – 2011-05-31 12:43:56

+0

找不到答案! – user756037 2011-05-31 14:59:42