2010-10-20 11 views
0

J'ai deux classes connectées définies comme ceci:gestion manuelle d'une table de jointure dans le château ActiveRecord

[ActiveRecord] 
    public class Store : ActiveRecordBase<Store> { 
     [PrimaryKey] 
     public int ID { get; set; } 

     [HasAndBelongsToMany(Table = "StoreCustJoin", 
          ColumnKey = "storeID", 
          ColumnRef = "customerID")] 
     public IList<Customer> customers { get; set; } 
    } 

    [ActiveRecord] 
    public class Customer : ActiveRecordBase<Customer> { 
     [PrimaryKey] 
     public int ID { get; set; } 

     [HasAndBelongsToMany(Table = "Join", 
          ColumnKey = "customerID", 
          ColumnRef = "storeID", 
          inverse = true)] 
     public IList<Store> stores { get; set; } 
    } 

    [ActiveRecord] 
    public class Join : ActiveRecordBase<Join> { 
     [PrimaryKey] 
     public int ID { get; set; } 

     [BelongsTo("storeID")] 
     public Store store { get; set; } 

     [BelongsTo("customerID")] 
     public Customer customer { get; set; } 

     [Property] 
     public int Status { get; set; } 
    } 

Lorsque je connecte un magasin à un client que je dois définir l'état aussi bien. J'ai donc essayé de le faire:

public void SetLink(Store theStore, Customer theCustomer, int status) { 
     var link = new Join() 
         { 
          Status = status, 
          store = theStore, 
          customer = theCustomer 
         }; 
     theStore.customers.Add(theCustomer); 
     theCustomer.stores.Add(theStore); 
    } 

Cela crée deux entrées dans ABJoin, le premier avec l'ensemble d'état, la deuxième sans. Si je n'ajoute pas les objets à leurs listes respectives, cela fonctionne. Mais alors le lien n'est pas reflété dans ces objets jusqu'à ce que la session en cours soit fermée et l'instance soit re-téléchargée à partir de la base de données.

Alors, y a-t-il un moyen de définir l'état lorsque je crée le lien et de garder les objets actuels valides et à jour?

Répondre

1

Lorsque votre table de relation (dans votre cas, la table « Rejoindre ») a des champs supplémentaires autres que les clefs étrangères aux tables il se rapporte, utilisez [HasMany] au lieu de [HasAndBelongsToMany], à savoir:

[ActiveRecord] 
public class Store : ActiveRecordBase<Store> { 
    [PrimaryKey] 
    public int ID { get; set; } 

    [HasMany] 
    public IList<Join> customers { get; set; } 
} 

[ActiveRecord] 
public class Customer : ActiveRecordBase<Customer> { 
    [PrimaryKey] 
    public int ID { get; set; } 

    [HasMany] 
    public IList<Join> stores { get; set; } 
} 

Des questions similaires:

+0

Merci. Cela m'aide beaucoup. – Jacobi