2009-04-07 14 views
0

私はあなたが助けることを望んでいます。私はSqlにLinqを使用して階層化されたWebサイトを開発しています。私はmemberStateというDBMLデザイナーで新しいクラス(またはオブジェクト)を作成しました。このオブジェクトは、データベース内の実際のテーブルではありません。 =

N-Tiered LinqToSql質問

(BulletinWizardDataContextコンテキスト=のDataContext)
{
のIEnumerable(memberState)MEMSを使用してパブリックオーバーライドのIEnumerable(memberState)GetMembersByState(文字列@state)
{
:私は私の中間層にこの方法を持っています(context.MembersにおけるMから
がcontext.MemberAddresses m.UserIdに
でMAは
がcontext.States中のSに参加ma.UserIdに等しく参加
ma.StateIdに に等しいs.StateId
s.StateName == @state

{
はuserId = m.UserID、
のfirstName = m.FirstName、
middleInitial = m.MiddleInitial、
lastNameの= m.LastName、
新しいmemberStateを選択 createDate = m.CreateDate、
modifyDate = m.ModifyDate
})。ToArray(memberState)();
return mems;私が参加する中
}
}

テーブル(メンバー、国、およびMemberAddressesは私のデータベース内の実際のテーブルです)。上記のクエリで使用できるように、オブジェクトmemberStatesを作成しました。(New MemberStateを選択してください。。データがWebページで更新されると、メンバテーブルへの変更はどのように保持されますか? 。。列以下:私の記憶が正しければユーザーID、姓、MiddleInitial、LastNameの、CREATEDATE、ModifyDate私は戻って、データベースへの変更を保存する方法を確認していない

おかげで、

+0

あなたのアプリケーションがN層であるとは思わないが、問題/質問に影響を与えます。 – achinda99

答えて

0

、ビューを作成することができます(メンバ、ステート、メンバアドレス)を追加してデータコンテキストに追加すると、ビューオブジェクト内のデータに対する変更をすべて保存でき、linqからsqlへのコミットが正しく処理されますすべての関係がデータベースとデータコンテキストの両方で明確に設定/定義されているためです。

0

メンバーテーブルがある場合、dbmlにはおそらくメンバークラスが含まれています。データベース内のメンバを更新するには、新しいメンバオブジェクトを作成し、それをBulletinWizardDataContext.Membersコレクションに添付する必要があります。次のコードに類似したものがあります(コードはテストしていません)。

using (BulletinWizardDataContext context = DataContext) 
{ 
    Member m = new Member() { UserId = userId }; 
    context.Members.Attach(m); 
    m.FirstName = firstName; 
    // Set other properties 
    context.SubmitChanges(); 
} 

プロパティを設定する前に添付ファイルを呼び出す必要があります。また、Linq2Sqlには、オブジェクトのプロパティがデフォルト値(数値の場合は0、ブール値の場合はfalse、文字列の場合はnullなど)に設定されている場合に、Attachにいくつかの問題があります。この場合、Attachは正しいSQLを生成しません。

0
var m = myContext.Members.Single(m=> m.UserID == myMemState.userID); 
m.FirstName = myMemState.firstName; 
m.MiddleInitial = myMemState.middleInitial; 
... 

これは簡単な方法です。 dbへの追加の往復を行いますが、うまくいくでしょう。それがあなたにとって問題なら、ヤコブのようにアタッチしてください。そのためには、オプティミスティックアップデートの設定を確認して、添付ファイルを作成するときに元のフィールドがあることを確認するなど、いくつかの追加ステップを実行する必要があります。