Ссылки NHibernate не сохраняют внешний ключ - PullRequest
1 голос
/ 13 октября 2011

У меня есть 2 класса, которые ссылаются друг на друга.Это странная ситуация, в которой нуждается наша CRM.

У меня есть таблицы и классы Organisation и EmAddress.Организация наследует от подписчика, у которого также есть таблица.Я думаю, что это может быть моей проблемой, или фактом, что я не могу установить Inverse на них, потому что нет «HasMany» ...

Порядок вставки / обновления: INSERT Email INSERT Org UPDATEЭлектронная почта для установки Email.Subscriber

Email.Subscriber должен быть "NOT NULL", поэтому это не работает.Как я могу изменить порядок, я не могу использовать Inverse, потому что нет списка.Всего 2 ссылки.

    public class Organization : Subscriber
    {
       public override string Class { get { return "Organization"; } }
       EmAddress PrimaryEmailAddress {get;set;}
    }

    public class OrganizationMap : SubclassMap<Organization>
    {        
      public OrganizationMap()
      {
        Table("Organization");
        KeyColumn("Organization");
        References(x => x.PrimaryEmail,"PrimaryEmailAddress").Cascade.SaveUpdate();
      }
    }

    public EmAddressMap()
    {
        Id(x => x.Id, "EmAddress");
        Map(x => x.EmailAddress, "eMailAddress");
        References<Subscriber>(x => x.Subscriber,"Subscriber").LazyLoad().Fetch.Select().Not.Nullable(); 
        /*not.nullable() throw s error.  NHibernate INSERTS email, INSERTS org, UPDATES email. */
   }

   public class EmAddress
   {
    public virtual Guid Id { get; set; }
    public virtual string EmailAddress { get; set; }
    public virtual Subscriber Subscriber { get; set; }
   }

     //Implementation
     var session = NHIbernateHelper.GetSession();
     using(var tx = session.BeginTransaction())
{
     var org = new Organization();
     org.PrimaryEmail = new EmAddress(){Subscriber = org};
     session.Save(org);
     tx.commit();

}

1 Ответ

0 голосов
/ 14 октября 2011

Этот пост может помочь: http://ayende.com/blog/3960/nhibernate-mapping-one-to-one

Пусть только одна сторона использует многие-к-одному (Свободно: "Ссылки"), а другая сторона использует один-к-одному (Свободно: "HasOne").

...