0

В моей бизнес-модели у меня есть "Роль пользователя" объект и один (или нулевой) объект "RoleFunctionality", возложенные на него:Fluent NHibernate One-To-ZeroOrOne 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) NOT NULL, 
    CONSTRAINT fk1 FOREIGN KEY (roleid) 
     REFERENCES "UserRole" (id) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION 
) 

Я хотел бы иметь их в качестве Связь один-к-одномуOrZero. Мои объекты и отображения ниже:

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"); 
    } 
} 

Everythings отлично работает, когда есть «RoleFunctionality» существует для «UserRole» - SaveOrUpdate() на работах красиво.

Но у меня есть исключение, когда я хотел бы удалить «UserRole» с помощью «RoleFunctionality» или когда я хотел бы обновить «UserRole» новыми «RoleFunctionalities», которые раньше были null.

Где проблема? Заранее спасибо.

+0

Вы можете поделиться с нами исключением? – Mert

+0

* Если немного возможно, я бы предложил - облегчить вашу жизнь проще - попытаться преобразовать это во много-к-одному. Самая большая проблема с индивидуальным с моей точки зрения - это всегда загружать оба. Играйте с .., но постарайтесь подумать об этом * –

ответ

0

После прочтения дополнительной информации я сделал свои сопоставления и объекты, как показано ниже. Работает хорошо сейчас:

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; } 
} 
Смежные вопросы