C# NHibernate参考文件不';保存外键

C# NHibernate参考文件不';保存外键,c#,nhibernate,fluent-nhibernate,nhibernate-mapping,C#,Nhibernate,Fluent Nhibernate,Nhibernate Mapping,我有两个相互引用的类。我们的CRM需要一种奇怪的情况 我有一个组织和EmAddress表和类。组织从订阅服务器继承,订阅服务器也有一个表。我想这可能是我的问题,或者我不能对这些设置反向,因为没有“HasMany” 插入/更新的顺序为。。 插入电子邮件 插入组织 更新电子邮件以设置电子邮件。订阅服务器 电子邮件。订阅者必须是“非空”,所以这不起作用。如何更改顺序,因为没有列表,所以不能使用反向。只有两份参考资料 public class Organization : Subscriber

我有两个相互引用的类。我们的CRM需要一种奇怪的情况

我有一个组织和EmAddress表和类。组织从订阅服务器继承,订阅服务器也有一个表。我想这可能是我的问题,或者我不能对这些设置反向,因为没有“HasMany”

插入/更新的顺序为。。 插入电子邮件 插入组织 更新电子邮件以设置电子邮件。订阅服务器

电子邮件。订阅者必须是“非空”,所以这不起作用。如何更改顺序,因为没有列表,所以不能使用反向。只有两份参考资料

    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();
公共类组织:订户
{
公共重写字符串类{get{return“Organization”;}
EmAddress PrimaryEmailAddress{get;set;}
}
公共类组织映射:子类映射
{        
公共组织地图()
{
表(“组织”);
KeyColumn(“组织”);
引用(x=>x.PrimaryEmail,“PrimaryEmailAddress”).Cascade.SaveUpdate();
}
}
公共EmAddressMap()
{
Id(x=>x.Id,“EmAddress”);
Map(x=>x.EmailAddress,“EmailAddress”);
引用(x=>x.Subscriber,“Subscriber”).LazyLoad().Fetch.Select().Not.Nullable();
/*not.nullable()抛出s错误。NHibernate插入电子邮件,插入组织,更新电子邮件*/
}
公共类EmAddress
{
公共虚拟Guid Id{get;set;}
公共虚拟字符串EmailAddress{get;set;}
公共虚拟订户订户{get;set;}
}
//实施
var session=NHIbernateHelper.GetSession();
使用(var tx=session.BeginTransaction())
{
var org=新组织();
org.PrimaryEmail=newemaddress(){Subscriber=org};
session.Save(org);
tx.commit();
}这篇文章可能会有帮助:


只有一方使用多对一(Fluent:“References”),另一方使用一对一(Fluent:“HasOne”)。

Thyanks,我以前看过这篇文章,但认为它不适用于这里。位于该数据库之上的CRM具有一些业务规则,这些规则导致我们的数据库模式与假设的不同。