【问题标题】:In which layer to make linq-sql calls as SubmitChanges(), InsertOnSubmit() etc在哪一层进行 linq-sql 调用,如 SubmitChanges()、InsertOnSubmit() 等
【发布时间】:2010-02-08 22:57:32
【问题描述】:

哪一层是进行 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();  
}

我是否将表示层代码与数据访问层混合在一起?如果是这样,我该如何处理中间的业务层对象?

请告诉我。谢谢。

【问题讨论】:

    标签: linq presentation layer submitchanges insertonsubmit


    【解决方案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 类,它们根据我们对数据的处理方式来拆分数据访问。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-01-12
        • 2013-05-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多