2016-07-14 53 views
0

我是流利nhibernate的新手。我正在开发一个项目包含以下在其数据库中3个表: “人”, “RealPerson”和 “LegalPerson”nhibernate无法确定实体异常的类型

这三个表有关系如上图: enter image description here

所有实体在我的代码,如这三个实体都是从这里基本的实体类继承的是这些实体

public class Person : Entity 
{ 
    public virtual RealPerson RealPerson { set; get; } 
    public virtual LegalPerson LegalPerson { set; get; } 

} 
public class RealPerson : Entity 
{ 
    public virtual string FirstName { set; get; } 
    public virtual string LastName { set; get; } 
    public virtual string FatherName { set; get; } 
    public virtual string NationalCode { set; get; } 
    public virtual DateTime BirthDate { set; get; } 

    public virtual string PhoneNumber { set; get; } 
    public virtual string MobileNumber { set; get; } 
    public virtual string EmailAddress { set; get; } 
    public virtual string HomeAddress { set; get; } 
    public virtual string WorkAddress { set; get; } 
    public virtual RealPerson Proxy { set; get; } 

} 
public class LegalPerson : Entity 
{ 
    public virtual string LegalPerson_Name { set; get; } 
    public virtual string RegistrationNumber { set; get; } 
    public virtual string Address { set; get; } 
    public virtual string PhoneNumber1 { set; get; } 
    public virtual string PhoneNumber2 { set; get; } 
    public virtual string PhoneNumber3 { set; get; } 
    public virtual RealPerson Proxy { set; get; } 
} 

和基实体类的代码的代码如下:

public class Entity 
{ 
    protected bool Equals(Entity other) 
    { 
     if (other == null) 
      return false; 
     if (Id == Guid.Empty || other.Id == Guid.Empty) 
      return base.Equals(other); 
     return Id.Equals(other.Id); 


    } 

    public virtual Guid Id { set; get; } 
    public override int GetHashCode() 
    { 
     return Id.GetHashCode(); 
    } 
    public override bool Equals(object obj) 
    { 
     if (obj is Entity) 
      return Equals((Entity)obj); 
     return base.Equals(obj); 
    } 
    protected ISession Session 
    { 
     get { return SessionAccountant.GetSession(); } 
    } 
    public virtual void Save() 
    { 
     Session.SaveOrUpdate(this); 
    } 

    public virtual void Delete() 
    { 
     Session.Delete(this); 
    } 
} 

最后classmaps如下:

public class PersonMapping : ClassMap<Person> 
{ 
    public PersonMapping() 
    { 
     Table("Person"); 
     Id(x => x.Id).GeneratedBy.GuidComb().Column("Person_Id"); 
     References(x => x.RealPerson).Nullable().LazyLoad().Column("RealPerson_Id"); 
     References(x => x.LegalPerson).Nullable().LazyLoad().Column("LegalPerson_Id"); 

    } 
} 
public class RealPersonMapping : ClassMap<RealPerson> 
{ 
    public RealPersonMapping() 
    { 
     Table("RealPerson"); 
     Id(x => x.Id).GeneratedBy.GuidComb().Column("RealPerson_Id"); 
     Map(x => x.FirstName).Not.Nullable().Column("FirstName"); 
     Map(x => x.LastName).Not.Nullable().Column("LastName"); 
     Map(x => x.FatherName).Not.Nullable().Column("FatherName"); 
     Map(x => x.NationalCode).Not.Nullable().Column("NationalCode"); 
     Map(x => x.BirthDate).Nullable().Column("BirthDate"); 
     Map(x => x.ShenasnamehNumber).Nullable().Column("ShenasnamehNumber"); 
     Map(x => x.PhoneNumber).Nullable().Column("PhoneNumber"); 
     Map(x => x.MobileNumber).Nullable().Column("MobileNumber"); 
     Map(x => x.EmailAddress).Nullable().Column("EmailAddress"); 
     Map(x => x.HomeAddress).Nullable().Column("HomeAddress"); 
     Map(x => x.WorkAddress).Nullable().Column("WorkAddress"); 
     References(x => x.Proxy).Nullable().LazyLoad().Column("Proxy_Id"); 
    } 
} 
public class LegalPersonMapping : ClassMap<LegalPerson> 
{ 
    public LegalPersonMapping() 
    { 
     Table("LegalPerson"); 
     Id(x => x.Id).GeneratedBy.GuidComb().Column("LegalPerson_Id"); 
     Map(x => x.LegalPerson_Name).Not.Nullable().Column("LegalPerson_Name"); 
     Map(x => x.RegistrationNumber).Not.Nullable().Column("RegistrationNumber"); 
     Map(x => x.Address).Not.Nullable().Column("Address"); 
     Map(x => x.PhoneNumber1).Nullable().Column("PhoneNumber1"); 
     Map(x => x.PhoneNumber2).Nullable().Column("PhoneNumber2"); 
     Map(x => x.PhoneNumber3).Nullable().Column("PhoneNumber3"); 
     References(x => x.Proxy).Nullable().LazyLoad().Column("Proxy_Id"); 

    } 
} 

我设置的配置,并创建一个会话。但是当我运行该项目,我在运行时得到此异常: 类型的未处理的异常“NHibernate.MappingException”发生在NHibernate.dll

其他信息:无法确定类型:EntitiesClasses.Person

这段代码有什么问题?!

回答

相关问题