В каком слое делать вызовы linq-sql как SubmitChanges (), InsertOnSubmit () и т. Д. - PullRequest
0 голосов
/ 09 февраля 2010

Какой слой является лучшим для выполнения вызовов linq-sql как SubmitChanges (), InsertOnSubmit () и т. Д.

Например, допустим, у меня есть две таблицы: родительская и дочерняя. Дочерняя таблица имеет внешний ключ для родителя (у дочерней таблицы есть столбец ParentId). Я хочу вставить родительский объект и дочерние объекты в БД.

Используя linq-sql, я могу это сделать.

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

Смешиваю ли я код уровня презентации со слоем доступа к данным? Если да, то как мне сделать это с промежуточным объектом бизнес-уровня?

Пожалуйста, дайте мне знать. Благодарю.

Ответы [ 2 ]

1 голос
/ 09 февраля 2010

Доступ к данным прямо на уровне представления, вероятно, не лучший способ сделать это.

Вы можете реализовать класс Writer, у которого есть методы для доступа к 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)
}

Тогда в классе обёртки

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

Это довольно упрощенный пример и не проверен. Я использовал подобный дизайн в недавнем проекте, где у нас есть определенные классы Writer и Reader, которые разделяют доступ к данным в зависимости от того, что мы делаем с данными.

0 голосов
/ 09 февраля 2010

Мы создали полноценный n-уровневый фреймворк с использованием L2S. У нас есть отдельный уровень пользовательского интерфейса, уровень бизнес-логики и уровень доступа к данным. Наши объекты передаются из пользовательского интерфейса на бизнес-уровень для бизнес-процесса и проверки, а затем передаются в DAL для операций с БД. Обратное также верно. Клиент делает запрос для объекта, который проходит через BLL, через DAL и обратно к клиенту.

...