2011-10-13 83 views
1

我有2个相互引用的类。这是我们的CRM需要的一个奇怪的情况。NHibernate的参考不要'保存外键

我有一个组织和EmAddress表和类。该组织从Subscriber继承,它也有一个表。我想这可能是我的问题,还是事实,我不能设置反向这些,因为没有“的hasMany” ......

插入的顺序/更新.. INSERT电子邮件 INSERT组织 更新电子邮件设置电子邮件。订阅者

Email.Subscriber需要是“NOT NULL”,所以这是行不通的。如何更改订单,因为没有列表,所以我不能使用逆。只有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(); 

}

回答

0

此信息可能帮助: http://ayende.com/blog/3960/nhibernate-mapping-one-to-one

只有一方使用了许多对一(流利:“参考”),另一侧用一到一个(流利:“HasOne”)。

+0

Thyanks,之前我曾看过那篇文章,但并没有认为它适用于此。位于此数据库之上的CRM具有一些业务规则,这些规则会导致我们的数据库架构与假设不同。 – Brandon