質問
現在、私のデザインの学位ます。数日前に私は生LINQ.いるという次の欲が出ることも興味深い企画のご利用にあたり私のプロジェクトが現在、そのまま混乱していないのです。
ってしLINQ to SQLクラスでの自動車生主体の授業は、各テーブルデータベースです。
仮にうまくいきませんのテーブルデータベース:
ユーザー
案件
UserProjects(共同テーブル)
共同テーブルを表すユーザーに関連付ける。
LINQ to SQLクラスの自動生成しこれらの授業でした。今は私が作成した別の(ユーザーとプロジェクト)の授業としてビジネスオブジェクトの使用これらの自動生成団体?
また、利用データベースの機能またはご利用の3段ます。に接続できます。話LINQダル方法からBLLはまた別のダルするメソッドの呼び出しのLINQダル??
class UserBLL
{
public void saveUser(String username, String password)
{
// here I am calling LINQ DAL from by BLL
UserDataContext db = new UserDataContext();
User u =new User {Username = username, Password = password};
db.user.InsertOnSubmit(u);
db.SubmitChanges();
}
}
は、上記の方法で呼び出し順序。
解決
LINQ to SQLは、単一の層設計に最適です。それほど大きくないの非接続モデルのためのまたはマルチティア環境の。
上記のコードは、データベースへの単一のユーザを挿入します。あなたは、MSSQL SQL Serverプロファイラを起動またはVisual Studioで出力するログを接続した場合。あなたが表示されるはずです。
//Hookup the log to the output in visual studio
using (var db = new UserDataContext()) {
db.Log = Console.Out;
}
INSERT INTO User VALUES (value1, value2, value3,...)
あなたのコードは
のように気にいらを見なければならないユーザーを更新するにはpublic void UpdateUser(String username, String password, int userId)
{
using (var db = new UserDataContext()) {
//Get Row From Database Marching Id
var user = db.user.Single(p => p.Id = userId);
//Update Values
user.Username = username;
user.Password = password;
//Save To The Database
db.SubmitChanges();
}
}
//Get All Users From Database
public IEnumerable<User> GetAllUsers()
{
using (var db = new UserDataContext()) {
//Get Row From Database Matching Id
var users = from user in db.user
select user;
return users.ToList();
}
}
//To display the data just enumerate through the enumeration that is returned.
var users = BusinessInstance.GetAllUsers();
foreach (var user in users) {
//user is the current item
}
あなたは確認する必要があり、あなたの、あなたのデータベースの契約あなたが仕事の単位を行うたびに使用しています。 (デフォルトではトランザクションを使用してデータベースコンテキストので、これは醜い得ることができます、のデータベースコンテキストを構築するとパフォーマンスについて気にしないでください!の)
あなたは、マルチティア環境で作業する場合、通常、あなたは「href="http://en.wikipedia.org/wiki/POCO" rel="nofollow noreferrer"> POCO の別々の
NCommon のLINQ to SQLのための偉大な抽象化され、ビジネスの検証とルールを処理する必要がありますます。 LINQ
他のヒント
私は通常クラスを作成するscoped datacontextの私のBLLオブジェクト。
ものを2コンストラクタ、1作datacontextものを受け入れるdatacontext.第二はできるよう、パス周辺のdatacontextからその他のBLLオブジェクト。
することができデータベースの操作オブジェクトから生産されており2つの異なるBLL物になってい素敵な分離の最大の関心事です。が必要となりますので、露出させるdatacontextとして公共の読み取り専用で渡すことができます。
何か注意するDataContextオブジェクトする必要はありませんexplictly処理 詳細はこちら.できると思いますが、基本的にはDataContextは住みにくいの寿命のBLLオブジェクトです。できる明示的に廃棄しない場合の必要はな無料の資源(また仕上げを追跡する
例えば
public class UserBLL
{
private readonly UserDataContext context;
public UserBLL() : this(new UserDataContext())
{
}
public UserBLL(UserDataContext context)
{
this.context = context
}
public UserDataContext Context { get { return context; } }
public void saveUser(String username, String password)
{
// here i am callsing LINQ DAL from by BLL
User u = new User {Username = username, Password = password};
Context.Users.InsertOnSubmit(u);
Context.SubmitChanges();
}
}