2015-06-05 15 views
10

Aynı türün özelliklerini OneToMany ilişkilendirmesinde eşleştirmeye çalışıyorum. Açıklama ile ayırt etmeye çalıştım ama burada sıkışmış. Birçok ilişkileri biri içinAynı türün birden fazla özelliğini otomatik eşleme yoluyla HasMany ile eşleme

public class User 
{ 
    public virtual int UserId { get; set; } 
    public virtual string UserName { get; set; } 

    [Description("From")] 
    public virtual IList<Message> FromMessageList { get; set; } 

    [Description("To")] 
    public virtual IList<Message> ToMessageList { get; set; } 
} 

public class Message 
{ 
    public virtual int MessageId { get; set; } 
    public virtual string Text { get; set; } 

    [Description("From")] 
    public virtual User FromUser { get; set; } 

    [Description("To")] 
    public virtual User ToUser { get; set; } 

} 

    public class DefaultHasManyConvention : IHasManyConvention 
    { 
     public void Apply(IOneToManyCollectionInstance instance) 
     { 
      if (instance.OtherSide.Property.GetDescription() == instance.Member.GetDescription()) 
      { 
       if (instance.Member.GetDescription() != null) 
        instance.Key.Column(instance.Member.GetDescription() + "Id"); 
       else 
        instance.Key.Column(instance.OtherSide.Property.Name + "Id"); 

       instance.Fetch.Select(); 
      } 
     } 
    } 

    public class DefaultReferenceConvention : IReferenceConvention 
    { 
     public void Apply(IManyToOneInstance instance) 
     { 
      if (instance.Property.GetDescription() != null) 
       instance.Column(instance.Property.GetDescription() + "Id"); 
      else 
       instance.Column(instance.Property.Name + "Id"); 

      instance.Fetch.Select(); 
     } 
    } 
+0

belki de MapedBy gibi bir şey arıyorum NHibernate – Mert

+0

Bu Varlık Yönetim mi? Birçok haritalama veya daha spesifik bir şey için basit bir tane ister misiniz? –

+0

nhibernate etiketli ve sizden EF olup olmadığını mı soruyorsunuz? Muhtemelen buna cevap vermek için yeterli değilsiniz. – Mert

cevap

1

Genellikle gibi kodlama kullanın:

public class User 
{ 
    public int UserId { get; set; } 
    public string UserName { get; set; } 

    [Description("From")] 
    public virtual ICollection<Message> FromMessageList { get; set; } 

    [Description("To")] 
    public virtual ICollection<Message> ToMessageList { get; set; } 

} 

public class Message 
{ 
    public int MessageId { get; set; } 
    public string Text { get; set; } 

    [Description("From")] 
    public virtual User FromUser { get; set; } 
    // From user foreign key column 
    [ForeignKey("FromUser")] 
    public int FromUserId {get;set;} 


    [Description("To")] 
    public virtual User ToUser { get; set; } 
    // ToUser foreign key column 
    [ForeignKey("ToUser")] 
    public int ToUserId {get;set;} 

} 
  1. deneyin IList yerine ICollection kullanmak - bu benim için birçok sorunu çözdük.
  2. Yabancı anahtar sütun adları ekleyin; sorgulamada daha kolay ve filtreleme yapmayı kolaylaştırır.
İlgili konular