0

Which layer is the best layer to make linq-sql calls as SubmitChanges(), InsertOnSubmit() etc.

For example, let's say I have two tables Parent and Child. Child table has foreign key on parent (Child table has ParentId column). I want to insert parent object and child objects into the db.

Using linq-sql, I can do this.

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

Am I mixing Presentation layer code with data access layer? If so, how do I do it with a business layer object in between?

Please let me know. Thanks.

4

2 に答える 2

1

プレゼンテーション層内でデータにアクセスできるようにすることは、おそらく最善の方法ではありません。

DataContext にアクセスするメソッドを持つ Writer クラスを実装できます。

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 クラスがあります。

于 2010-02-08T23:42:57.500 に答える
0

L2S を使用して本格的な n 層フレームワークを構築しました。明確な UI レイヤー、ビジネス ロジック レイヤー、およびデータ アクセス レイヤーがあります。エンティティは、ビジネス プロセスと検証のために UI からビジネス レイヤーに渡され、DB 操作のために DAL に渡されます。逆もまた然り。クライアントは、BLL を通過し、DAL を経由してクライアントに戻るエンティティを要求します。

于 2010-02-08T23:36:04.753 に答える