Почему Fluent Nhibernate не сохраняет дочерние объекты? - PullRequest
0 голосов
/ 03 июня 2011

Мои модели,


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 Ответ

1 голос
/ 03 июня 2011

Является ли session.Get (1) действительно возвращением действительного человека. Я не думаю, что это действительный звонок. Не должно ли это быть:

session.Get<Person>(1)

или

session.Get(typeof(Person), 1)

Вы, вероятно, должны дважды проверить, чтобы убедиться, что то, что вы получаете, является действительным. Я думаю, это не так.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...