C# 使用NHibernate时发生类型转换异常

C# 使用NHibernate时发生类型转换异常,c#,nhibernate,orm,C#,Nhibernate,Orm,我有以下持久性类和相应的XML映射文件: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace DataAccessLayer.Poco { public class User { private int id; private int positio

我有以下持久性类和相应的XML映射文件:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace DataAccessLayer.Poco
{
    public class User
    {
        private int id;
        private int positionId;
        private int companyId;
        private int roleId;
        private int languageId;
        private string firstname;
        private string firstnameUpperCase;
        private string lastname;
        private string initials;
        private string pseudonyms;
        private string mail;
        private string phone;
        private string mobile;
        private bool managementFlag;
        private bool activityFlag;
        private string information;
        private string image;
        private string path;

        public User()
        {

        }

        public virtual int Id
        {
            get { return id; }
            set { id = value; Console.WriteLine("setter Id");}
        }

        public virtual int PositionId
        {
            get { return positionId; }
            set { positionId = value; Console.WriteLine("setter PositionId"); }
        }

        public virtual int CompanyId
        {
            get { return companyId; }
            set { companyId = value; Console.WriteLine("setter CompanyId"); }
        }

        public virtual int RoleId
        {
            get { return roleId; }
            set { roleId = value; Console.WriteLine("setter RoleId"); }
        }

        public virtual int LanguageId
        {
            get { return languageId; }
            set { languageId = value; Console.WriteLine("setter LanguageId"); }
        }

        public virtual string Firstname
        {
            get { return firstname; }
            set { firstname = value; Console.WriteLine("setter Firstname"); }
        }

        public virtual string FirstnameUpperCase
        {
            get { return firstnameUpperCase; }
            set { firstnameUpperCase = value; Console.WriteLine("setter FirstnameUpperCase"); }
        }

        public virtual string Lastname
        {
            get { return lastname; }
            set { lastname = value; Console.WriteLine("setter Lastname"); }
        }

        public virtual string Initials
        {
            get { return initials; }
            set { initials = value; Console.WriteLine("setter Initials"); }
        }

        public virtual string Pseudonyms
        {
            get { return pseudonyms; }
            set { pseudonyms = value; Console.WriteLine("setter Pseudonyms"); }
        }

        public virtual string Mail
        {
            get { return mail; }
            set { mail = value; Console.WriteLine("setter Mail"); }
        }

        public virtual string Phone
        {
            get { return phone; }
            set { phone = value; Console.WriteLine("setter Phone"); }
        }

        public virtual string Mobile
        {
            get { return mobile; }
            set { mobile = value; Console.WriteLine("setter Mobile"); }
        }

        public virtual bool ManagementFlag
        {
            get { return managementFlag; }
            set { managementFlag = value; Console.WriteLine("setter ManagementFlag"); }
        }

        public virtual bool ActivityFlag
        {
            get { return activityFlag; }
            set { activityFlag = value; Console.WriteLine("setter activityFlag"); }
        }

        public virtual string Information
        {
            get { return information; }
            set { information = value; Console.WriteLine("setter information"); }
        }

        public virtual string Image
        {
            get { return image; }
            set { image = value; Console.WriteLine("setter image"); }
        }

        public virtual string Path
        {
            get { return path; }
            set { path = value; Console.WriteLine("setter path"); }
        }
    }
}
和XML文件:


最明显的一点是,你需要再次回顾一下。多对一元素的使用方式如下:

public class Foo {
    public Bar RelatedBar {get; set;}
}

public class Bar {
    public int BarId {get; set;}
}
Foo
可以这样映射:

public class Foo {
    public Bar RelatedBar {get; set;}
}

public class Bar {
    public int BarId {get; set;}
}


如果您真的想在Foo类中使用RelatedBarId之类的东西,那么您需要使用property元素对其进行映射,然后NHibernate就不会知道这种关系了。

最明显的一点是,您需要再次查看。多对一元素的使用方式如下:

public class Foo {
    public Bar RelatedBar {get; set;}
}

public class Bar {
    public int BarId {get; set;}
}
Foo
可以这样映射:

public class Foo {
    public Bar RelatedBar {get; set;}
}

public class Bar {
    public int BarId {get; set;}
}

如果您真的想在Foo类中使用RelatedBarId之类的东西,那么需要使用property元素对其进行映射,而NHibernate则不知道这种关系