Existem duas maneiras de fazer um mapeamento bidirecional um-para-um com NHibernate, através de associação por Primary Key e Foreign Key, vamos pegar como exemplo as classes a seguir:
[csharp]public class Setting
{
public virtual Guid Id { get; set; }
public virtual Student Student { get; set; }
}
public class Student
{
public virtual Guid Id { get; set; }
public virtual Setting Setting { get; set; }
}
Primary Key Association
[csharp]public SettingMap()
{
Id(x => x.Id).GeneratedBy.Guid();
HasOne(x => x.Student).Cascade.All();
}
public StudentMap()
{
Id(x => x.Id).GeneratedBy.Foreign("Setting");
HasOne(x => x.Setting).Constrained();
}
… salvando uma nova instância da classe Setting:
[csharp]var setting = new Setting();
setting.Student = new Student();
setting.Student.Name = "student1";
setting.Student.Setting = setting;
setting.Name = "setting1";
session.Save(setting);
Foreign Key Association
[csharp]public SettingMap()
{
Id(x => x.Id).GeneratedBy.Guid();
References(x => x.Student).Unique().Cascade.All();
}
public StudentMap()
{
Id(x => x.Id).GeneratedBy.Guid();
HasOne(x => x.Setting).Cascade.All().PropertyRef("Student");
}
Associação de chave primária é a melhor solução, mas deve ser usado somente quando você tem certeza absoluta de que a associação será sempre um-para-um. Note-se que AllDeleteOrphan cascade não é suportado no um-para-um em NH.
Para maiores detalhes acesse:
http://fabiomaulo.blogspot.com/2010/03/conform-mapping-one-to-one.html
Posts recentes
Categorias
- .Net (25)
- .Net Standard (2)
- .NetCore (3)
- Android (3)
- Arquitetura de Software (6)
- Asp.Net (6)
- C# (17)
- Dependency Injection (1)
- Entity Framework (3)
- Eventos (2)
- Fluent Interface (2)
- Gerenciamento de Projetos (1)
- IOS (3)
- NHibernate (4)
- ORM (5)
- Silverlight (3)
- Uncategorized (5)
- Visual Studio (10)
- WCF (5)
- Windows Azure (2)
- WPF (3)
- Xamarin (6)