C# NHibernate如何将外键关系映射到多个属性

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

我正在使用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 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);
  });