哪个层是使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();
}
我是否将表示层代码与数据访问层混合?如果是这样,我如何使用其间的业务层对象?
请告诉我。谢谢。
答案 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,然后返回客户端。