2011-06-03 61 views
0

我的模型,爲什麼流利Nhibernate不保存子對象?


public class Person 
    { 
     public Person() 
     { 
      BloodPressureRecords = new List(); 
     } 
     public virtual int Id { private set; get; } 
     public virtual string Name { set; get; } 
     public virtual int Age { get; set; } 
     public virtual IList BloodPressureRecords {get;set;} 

    } 

    public class BloodPressure 
    { 
     public virtual int Id { private set; get; } 
     public virtual DateTime RecordDate { set; get; } 
     public virtual int BPU { get; set; } 
     public virtual int BPL { get; set; } 
     public virtual Person Person { get; set; } 

    } 

Mappings 

public class PersonMap : ClassMap 
    { 
     public PersonMap() 
     { 
      Table("Persons"); 
      Id(d => d.Id).GeneratedBy.Identity(); 
      Map(d => d.Name).Not.Nullable().Length(50); 
      Map(d => d.Age).Not.Nullable(); 
      HasMany(d => d.BloodPressureRecords).KeyColumn("PersonId").Cascade.All().Inverse(); 
     } 
    } 

    public class BloodPressureMap : ClassMap 
    { 
     public BloodPressureMap() 
     { 
      Table("BloodPressure"); 
      Id(d => d.Id).GeneratedBy.Identity(); 
      Map(d => d.BPL).Not.Nullable(); 
      Map(d => d.BPU).Not.Nullable(); 
      Map(d => d.RecordDate).Not.Nullable(); 
     } 
    } 

Now, I am trying to add two BloodPressure records. But, getting exception 

Person p = session.Get(1); 
      foreach (var item in bps) 
      { 
       BloodPressure pressure = new BloodPressure(); 
       pressure.BPL = int.Parse(item.BPLower); 
       pressure.BPU = int.Parse(item.BPUpper); 
       pressure.RecordDate = item.RecordDate; 
       pressure.Person = p; 
       p.BloodPressureRecords.Add(pressure); 

      } 

      session.SaveOrUpdate(p); 
      tran.Commit(); 

The exception 
Cannot insert the value NULL into column 'PersonId', table 'HealthMonitor.dbo.BloodPressure'; column does not allow nulls. INSERT fails.\r\nThe statement has been terminated 

我在做什麼錯?

回答

1

是session.Get(1)真的返回一個有效的人。我不認爲這是一個有效的電話。它不應該是:

session.Get<Person>(1) 

session.Get(typeof(Person), 1) 

你或許應該仔細檢查,以確保您得到什麼回是有效的。我猜這不是。

+0

我不得不添加引用(x => x.Person).Column(「PersonId」);在BPMap和它的工作! – ruskin 2011-06-03 17:57:16

+0

或者......是的,我錯過了那個。 – 2011-06-03 18:13:03