2009-09-17 5 views
4

J'essaie d'utiliser la fonction SimpleRepository dans Subsonic3 - tout d'abord, je dois dire un grand merci à RobC - Subsonic est vraiment à la base, et j'ai hâte de voir d'autres mises à jour de SimpleRepository . Je suis un grand fan de l'approche de migration (développeur/classe pilotée plutôt que de démarrer avec la DB).Subsonic: SimpleRepository Relation parents-enfants

J'ai jeté un oeil à la poste ici: Parent and Child object in SimpleRepository mais je suis encore un peu confus.

Si j'ai ces classes sont définies:

public class Permit { 

     public int PermitID {get; set;} 
     public string Number { get; set; } 
     public DateTime? DateIssued { get; set; } 
     public Product product { get; set; } 
    } 

    public class Product 
    { 
     public int ProductID { get; set; } 
     public string Value { get; set; } 

    } 

et je veux enregistrer les données d'un permis, que dois-je faire? Dois-je avoir défini un ProductID dans la classe Permit, puis l'associer par programme? Ou le code ci-dessous devrait-il fonctionner? Cela crée la table Permit et Product, mais pas de liens entre eux. Qu'est-ce que je fais mal? Merci

+1

+1. Nous commençons tout juste à évaluer si nous voulons utiliser SubSonic. Une fois de mes collègues a demandé comment il gère les tables connexes, les jointures, etc. Votre question A J, et la réponse d'Adam me disent que cela fonctionne, au moins. – David

Répondre

1

Ce que vous devez savoir ici, c'est que les relations sont créées en remplissant des valeurs de clé étrangères. Ainsi, dans votre exemple, vous créez un permis et l'enregistrez, puis définissez le ProductID du permis (sans enregistrer ces informations), puis enregistrez le produit. Si vous réorganisez votre code comme suit, le ProductID sera défini correctement:

var repo = new SimpleRepository("ECPermit", SimpleRepositoryOptions.RunMigrations); 
var permit = new Permit(); 
var product = new Product(); 

product.Value = "this is a product"; 
repo.Add(product); 

permit.Number = "apermit"; 
permit.DateAdded = DateTime.Now;  
permit.ProductId = product.Id; 
repo.Add(permit); 
+0

+1. Nous commençons tout juste à évaluer si nous voulons utiliser SubSonic. Une fois de mes collègues a demandé comment il gère les tables connexes, les jointures, etc. Votre question A J, et la réponse d'Adam me disent que cela fonctionne, au moins. – David

+0

Je suspecte permit.Product = product.Id; devrait en fait être permis.ProductId = product.Id; –

Questions connexes