2012-03-06 23 views
1

任何映射我有一個許多到任何映射和繼承衝突試圖映射我的域名是這樣時:NHibernate的3.2許多被程序代碼和繼承

public class Member { 
    public virtual int Id { get; set; } 
    // many: 
    public virtual IList<IssuedToken> IssuedTokens { get; set; } 
} 

public abstract class IssuedToken { 
    public virtual int Id { get; set; } 
    // any: 
    public virtual Member Member { get; set; } 
} 

public class IssuedRequestToken : IssuedToken { } 

public class IssuedAccessToken : IssuedToken { } 

我映射繼承這樣的:

public class IssuedTokenMap : ClassMapping<IssuedToken> { 
    public IssuedTokenMap() { 
     Discriminator(t => { 
      t.Force(true); 
      t.Insert(true); 
      t.Length(32); 
      t.NotNullable(true); 
      t.Type(NHibernateUtil.String); 
      t.Column("Discriminator"); 
     }); 
    } 
} 

public class IssuedAccessTokenMap : SubclassMapping<IssuedAccessToken> { 
    public IssuedAccessTokenMap() { 
     DiscriminatorValue("IssuedAccessToken"); 
    } 
} 

public class IssuedRequestTokenMap : SubclassMapping<IssuedRequestToken> { 
    public IssuedRequestTokenMap() { 
     DiscriminatorValue("IssuedRequestToken"); 

    } 
} 

現在我要地圖的IssuedToken(多)和Member(任意)的關係,但我不知道浩要做到這一點!你能幫我理解並映射關係嗎?

注:我使用的代碼NHibernate 3.2映射 - 不NHibernateFluent API,也不XML

回答

1

嘗試:

public class MemberMap : ClassMapping<Member> { 
    public MemberMap() { 

     // add a bag -or set. 
     Bag(t => t.IssuedTokens, 
      bag => { 
       bag.Inverse(true); 
       bag.Key(k => k.Column(col => col.Name("MemberId"))); 
      }, 
      c => c.ManyToAny<int>(m => { 
       m.Columns(id => { 
        id.Name("MemberId"); 
        id.NotNullable(true); 
       }, cls => { 
        cls.Name("Discriminator"); 
        cls.NotNullable(true); 
       }); 
       m.IdType<int>(); 
       m.MetaType<string>(); 
       m.MetaValue("IssuedAccessToken", typeof(IssuedAccessToken)); 
       m.MetaValue("IssuedRequestToken", typeof(IssuedRequestToken)); 
      })); 
    } 
} 

和:

public class IssuedTokenMap : ClassMapping<IssuedToken> { 
    public IssuedTokenMap() { 
     Discriminator(t => { 
      t.Force(true); 
      t.Insert(true); 
      t.Length(32); 
      t.NotNullable(true); 
      t.Type(NHibernateUtil.String); 
      t.Column("Discriminator"); 
     }); 

     // add a many-to-one 
     ManyToOne(t => t.Member, t => { 
      t.Column("MemberId"); 
      t.NotNullable(true); 
     }); 
    } 
} 
+0

在先進的感謝。有用! – 2012-03-06 11:22:46