2015-06-05 6 views
10

Sto tentando di mappare proprietà dello stesso tipo su un'associazione OneToMany. Ho provato a distinguere con Descrizione ma sono rimasto bloccato qui.Mappatura di più proprietà di uno stesso tipo con HasMany tramite l'automapping

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

forse sto cercando qualcosa come MappedBy in NHibernate – Mert

+0

È questo Entity Framework? Vuoi una mappatura da uno a molti o qualcosa di più specifico? –

+0

nhibernate tagged e stai chiedendo se questo è EF? probabilmente non sei qualificato per rispondere a questo. – Mert

risposta

1

Per uno di molte relazioni Io generalmente uso di codifica come:

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. Provare a usare ICollection invece di IList - questo ha risolto molte questioni per me.
  2. Aggiungi nomi di colonne chiave esterna; rende la mappatura più semplice e il filtraggio nelle query più semplice.
Problemi correlati