В каком слое делать вызовы linq-sql как SubmitChanges(), InsertOnSubmit() и т. Д.
Какой слой является лучшим для выполнения вызовов linq-sql, таких как SubmitChanges(), InsertOnSubmit() и т. Д.
Например, допустим, у меня есть две таблицы Parent и Child. Дочерняя таблица имеет внешний ключ для родителя (у дочерней таблицы есть столбец 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 ответа
Наличие доступа к данным прямо на уровне представления, вероятно, не лучший способ сделать это.
Вы можете реализовать класс 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, которые разделяют доступ к данным в зависимости от того, что мы делаем с данными.
Мы создали полноценный n-уровневый фреймворк с использованием L2S. У нас есть отдельный уровень пользовательского интерфейса, уровень бизнес-логики и уровень доступа к данным. Наши сущности передаются из пользовательского интерфейса на бизнес-уровень для бизнес-процесса и проверки, а затем передаются в DAL для операций с БД. Обратное также верно. Клиент делает запрос для объекта, который проходит через BLL, через DAL и обратно к клиенту.