C# 使用NHibernate时发生类型转换异常
我有以下持久性类和相应的XML映射文件: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
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则不知道这种关系