How to do a fluent nhibernate one to one mapping?

前端 未结 4 858
长情又很酷
长情又很酷 2020-12-02 19:15

How do I do this I am trying to make a one to one mapping.

public class Setting
{
    public virtual Guid StudentId { get; set; }
    public virtual DateFilt         


        
4条回答
  •  遥遥无期
    2020-12-02 19:36

    There are two basic ways how to map bidirectional one-to-one association in NH. Let's say the classes look like this:

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

    Setting class is a master in the association ("aggregate root"). It is quite unusual but it depends on problem domain...

    Primary key association

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

    and a new setting instance should be stored:

            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

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

    Primary key association is close to your solution. Primary key association should be used only when you are absolutely sure that the association will be always one-to-one. Note that AllDeleteOrphan cascade is not supported for one-to-one in NH.

    EDIT: For more details see:

    http://fabiomaulo.blogspot.com/2010/03/conform-mapping-one-to-one.html

    http://ayende.com/blog/3960/nhibernate-mapping-one-to-one

提交回复
热议问题