Postgresql Fluent NHibernate一对零映射

Postgresql Fluent NHibernate一对零映射,postgresql,nhibernate,fluent-nhibernate,fluent-nhibernate-mapping,Postgresql,Nhibernate,Fluent Nhibernate,Fluent Nhibernate Mapping,在我的业务模型中,我有“用户角色”实体和分配给它的一个(或零个)“角色功能”实体: "UserRole" ( id integer NOT NULL, name character varying(255), CONSTRAINT "UserRole_pkey" PRIMARY KEY (id) ) "RoleFunctionality" ( roleid integer NOT NULL, functionalities character varying(255) NO

在我的业务模型中,我有“用户角色”实体和分配给它的一个(或零个)“角色功能”实体:

"UserRole"
(
  id integer NOT NULL,
  name character varying(255),
  CONSTRAINT "UserRole_pkey" PRIMARY KEY (id)
)

"RoleFunctionality"
(
  roleid integer NOT NULL,
  functionalities character varying(255) NOT NULL,
  CONSTRAINT fk1 FOREIGN KEY (roleid)
      REFERENCES "UserRole" (id) MATCH SIMPLE
      ON UPDATE NO ACTION ON DELETE NO ACTION
)
我希望它们是一对一或零的关系。我的实体和映射如下所示:

public class UserRole
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual RoleFunctionality Functionalities { get; set; }
}

public class UserRoleMap : ClassMap<UserRole>
{
    UserRoleMap()
    {
        Id(x => x.Id).GeneratedBy.Native();
        Map(x => x.Name);
        HasOne(x => x.Functionalities);
    }
}

public class RoleFunctionality
{
    public virtual int RoleId { get; set; }
    public virtual UserRole Role { get; set; }
    public virtual string Functionalities { get; set; }
}

public class RoleFunctionalityMap : ClassMap<RoleFunctionality>
{
    RoleFunctionalityMap()
    {
        Id(x => x.RoleId);
        Map(x => x.Functionalities);
        HasOne(x => x.Role).Constrained().ForeignKey("fk1");
    }
}
公共类用户角色
{
公共虚拟整数Id{get;set;}
公共虚拟字符串名称{get;set;}
公共虚拟角色功能{get;set;}
}
公共类UserRoleMap:ClassMap
{
UserRoleMap()
{
Id(x=>x.Id).GeneratedBy.Native();
Map(x=>x.Name);
HasOne(x=>x.functionaties);
}
}
公共类角色功能
{
公共虚拟int RoleId{get;set;}
公共虚拟用户角色{get;set;}
公共虚拟字符串功能{get;set;}
}
公共类角色功能映射:类映射
{
角色功能映射()
{
Id(x=>x.RoleId);
映射(x=>x.功能);
HasOne(x=>x.Role).Constrained().ForeignKey(“fk1”);
}
}
当“UserRole”-SaveOrUpdate()上存在“RoleFunctionality”时,一切都可以正常工作

但当我想用“roleffunctionality”删除“UserRole”或用以前为空的新“roleffunctionalities”更新“UserRole”时,我有一个例外


问题在哪里?提前感谢。

在阅读了一些其他信息后,我制作了如下映射和实体。现在效果很好:

public class RoleFunctionalityMap : ClassMap<RoleFunctionality>
{
    RoleFunctionalityMap()
    {
        Id(x => x.RoleId).GeneratedBy.Foreign("Role");
        Map(x => x.Functionalities);
        HasOne(x => x.Role).Constrained();
    }
}

public class RoleFunctionality
{
    public virtual int RoleId { get; set; }
    public virtual string Functionalities { get; set; }
    public virtual UserRole Role { get; set; }
}

public class UserRoleMap : ClassMap<UserRole>
{
    UserRoleMap()
    {
        Id(x => x.Id).GeneratedBy.Native();
        Map(x => x.Name);
        HasOne(x => x.Functionalities).Cascade.All();
    }
}

public class UserRole
{
    public virtual int Id { get; set; }
    public virtual string Name { get; set; }
    public virtual RoleFunctionality Functionalities { get; set; }
}
public类roleffunctionalitymap:ClassMap
{
角色功能映射()
{
Id(x=>x.RoleId).GeneratedBy.Foreign(“角色”);
映射(x=>x.功能);
HasOne(x=>x.Role).Constrained();
}
}
公共类角色功能
{
公共虚拟int RoleId{get;set;}
公共虚拟字符串功能{get;set;}
公共虚拟用户角色{get;set;}
}
公共类UserRoleMap:ClassMap
{
UserRoleMap()
{
Id(x=>x.Id).GeneratedBy.Native();
Map(x=>x.Name);
HasOne(x=>x.functionaties).Cascade.All();
}
}
公共类用户角色
{
公共虚拟整数Id{get;set;}
公共虚拟字符串名称{get;set;}
公共虚拟角色功能{get;set;}
}

你能和我们分享一下例外情况吗?如果可能的话,我建议-为了让你以后的生活更轻松-尝试将其转换为多对一。从我的角度来看,一对一的最大问题是——它总是同时加载这两个。玩但是试着想想