在哪个层中使linq-sql调用为SubmitChanges(),InsertOnSubmit()等

时间:2010-02-08 22:57:32

标签: linq presentation layer 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 个答案:

答案 0 :(得分:1)

在表示层中拥有数据访问权限可能不是最好的方法。

您可以实现一个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类,它们根据我们对数据的处理来分割数据访问。

答案 1 :(得分:0)

我们使用L2S构建了一个完整的n层框架。我们有一个独特的UI层,业务逻辑层和数据访问层。我们的实体从UI传递到业务层以进行业务流程和验证,然后传递给DAL以进行数据库操作。反之亦然。客户端请求实体通过BLL,直至DAL,然后返回客户端。