Question

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

Par exemple, disons que j'ai deux tables parent et enfant. table enfant a clé étrangère parent (table enfant a colonne ParentId). Je veux insérer l'objet parent et les objets enfant dans la db.

LINQ-sql, je peux le faire.

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();  
}

Est-ce que je mixe le code de la couche de présentation avec la couche d'accès aux données? Si oui, comment dois-je faire avec un objet de la couche d'affaires entre les deux?

S'il vous plaît laissez-moi savoir. Merci.

Était-ce utile?

La solution

Avoir l'accès aux données là dans la couche de présentation est probablement pas la meilleure façon 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)
}

Ensuite, 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
  //...
}

Ceci est tout à fait un exemple simplifié et non testé. Je l'ai utilisé une conception similaire dans un récent projet où nous avons des cours d'écriture et de lecture spécifiques qui divisent l'accès aux données en fonction de ce que nous faisons avec les données.

Autres conseils

Nous avons construit un cadre complet n-tier en utilisant L2S. Nous avons une couche d'interface utilisateur distincte, la couche logique métier et données couche d'accès. Nos entités sont transmises de l'interface utilisateur à la couche d'affaires des processus d'affaires et de validation, puis transmis à la DAL pour les opérations DB. L'inverse est également vrai. Un client fait une demande d'une entité qui passe par le BLL, en passant par le DAL, et au client.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top