2010-02-08 23 views
0

Quelle couche est la meilleure couche pour faire des appels LINQ-sql comme SubmitChanges(), InsertOnSubmit(), etc.couche dans laquelle pour faire des appels LINQ-sql comme SubmitChanges(), InsertOnSubmit() etc

Par exemple, disons que j'ai deux tables parent et enfant. La table enfant a une clé étrangère sur le parent (la table enfant a la colonne ParentId). Je veux insérer l'objet parent et les objets enfants dans la base de données. Avec linq-sql, je peux le faire en utilisant linq-sql. Est-ce que je mélange un code de couche de présentation avec une couche d'accès aux données?

Parent parent = new Parent(); 
Child child1 = new Child(); 
Child child2 = new Child(); 
//assign values to parent data members 
//... 

parent.Childs.Add(child1); 
parent.Childs.Add(child2); 

using (DataContext db = new DataContext()) 
{ 
    db.Parents.InsertOnSubmit(parent); 
    db.SubmitOnChanges(); 
} 

Si oui, comment le faire avec un objet de couche de gestion entre?

Faites-le moi savoir s'il vous plaît. Merci.

Répondre

1

L'accès aux données à l'intérieur de la couche de présentation n'est probablement pas le meilleur moyen de le faire.

Vous pouvez implémenter une classe Writer qui a des méthodes qui accèdent au DataContext.

Parent parent = new Parent(); 
Child child1 = new Child(); 
Child child2 = new Child(); 
//assign values to parent data members 
//... 

parent.Childs.Add(child1); 
parent.Childs.Add(child2);  

using (var parentWriter = new ParentWriter()) 
{ 
    parentWriter.Insert(parent) 
} 

Puis, dans la classe wrapper

public class ParentWriter : IDisposable 
{ 
    private DataContext _dc; 

    public ParentWriter() 
    { 
    _dc = new DataContext(); 
    } 

    public void Insert(Parent parent) 
    { 
    _dc.Parents.InsertOnSubmit(parent); 
    _dc.SubmitOnChanges(); 
    } 

    //IDisposable Members 
    //... 
} 

C'est tout à fait un exemple simplifié et est non testé. J'ai utilisé un design similaire dans un projet récent où nous avons des classes Writer et Reader spécifiques qui divisent l'accès aux données en fonction de ce que nous faisons avec les données.

+0

merci. ça a du sens. – hIpPy

0

Nous avons construit une structure complète à n niveaux en utilisant L2S. Nous avons une couche d'interface utilisateur distincte, une couche logique métier et une couche d'accès aux données. Nos entités sont transmises de l'interface utilisateur à la couche de gestion pour le processus métier et la validation, puis transmises à la couche d'accès au client pour les opérations de base de données. L'inverse est également vrai. Un client fait une demande pour une entité qui passe par la BLL, à travers la DAL, et revient au client.