C# NHibernate如何将外键关系映射到多个属性
我正在使用NHibernate作为我个人项目的ORM。我有一个用于存储的PostgreSQL数据库,我正在尝试映射表之间的多对一关系 我有一个web_异常表,如下所示C# NHibernate如何将外键关系映射到多个属性,c#,nhibernate,orm,rdbms,C#,Nhibernate,Orm,Rdbms,我正在使用NHibernate作为我个人项目的ORM。我有一个用于存储的PostgreSQL数据库,我正在尝试映射表之间的多对一关系 我有一个web_异常表,如下所示 CREATE TABLE logging.web_exception ( web_exception_id integer NOT NULL DEFAULT nextval('logging.web_exception_web_exception_id_seq'::regclass), query_string c
CREATE TABLE logging.web_exception
(
web_exception_id integer NOT NULL DEFAULT nextval('logging.web_exception_web_exception_id_seq'::regclass),
query_string character varying(2048) COLLATE pg_catalog."default",
form text COLLATE pg_catalog."default",
cookies text COLLATE pg_catalog."default",
session text COLLATE pg_catalog."default",
headers text COLLATE pg_catalog."default",
exception text COLLATE pg_catalog."default" NOT NULL,
url character varying(2048) COLLATE pg_catalog."default" NOT NULL,
application_id integer,
CONSTRAINT web_exception_pkey PRIMARY KEY (web_exception_id),
CONSTRAINT fk_web_exception_application FOREIGN KEY (application_id)
REFERENCES public.application (application_id) MATCH SIMPLE
ON UPDATE NO ACTION
ON DELETE NO ACTION
)
我试图将其映射到我的WebException类,如下所示
public class WebException
{
public virtual int WebExceptionId { get; set; }
public virtual string QueryString { get; set; }
public virtual string Form { get; set; }
public virtual string Cookies { get; set; }
public virtual string Session { get; set; }
public virtual string Headers { get; set; }
public virtual string Exception { get; set; }
public virtual string Url { get; set; }
public virtual int? ApplicationId { get; set; }
public virtual Application Application { get; set; }
}
我遇到了一个问题,将类与ApplicationId
和Application
属性映射在一起。这两个属性都表示我在数据库中定义的应用程序
表的外键。一个显然只是整数主键值,另一个是表示该表中一行的整个实体。在我的映射中,我有
Property(
we => we.ApplicationId,
m => m.Column(c => c.Name("application_id"))
);
ManyToOne(we => we.Application, mto => mto.Column("application_id"));
这似乎使NHibernate认为属性应该映射到两个单独的列。在试图将其保存到数据库时,我得到了这个异常消息,它是从NHibernates内部生成的
索引超出范围。必须为非负数且小于集合的大小。
参数名称:索引
当我删除manytone
映射时,保存记录的效果很好。但是,我希望两种属性都具有灵活性。i、 e.能够在保存时简单地设置ApplicationId
属性,以创建表之间的关系,并且能够在需要时将整个Application
类作为WebException
类的成员带回。有什么办法可以做到这一点吗?试试这个:
ManyToOne(we => we.Application, mto => { mto.Column("application_id")
mto.Class(typeof(Application));
mto.Update(false);
mto.Insert(false);
mto.Lazy(LazyRelation.NoLazy);
});