3

複数のデータベースでユーザー アカウントの資格情報を更新するツールを作成しようとしています。これらのデータベースはそれぞれ、基本的に同じアプリケーションの異なるバージョンをサポートしているため、各データベースは同じテーブル名を持っています。これらの各データベースの opususer という 1 つのテーブルだけに関心があります。

最初の Linq to SQL クラスを作成し、チェックボックス リストを使用して、選択したアイテムのコレクションを作成し、ループしてユーザー資格情報を更新する必要があるメソッドに送信しました。これは、1 つの DataContext がある場合は正常に機能しますが、別の Linq to SQL クラスを追加して、別のデータベースを除いて同じものを再作成しようとすると、いくつかのあいまいなエラーと「メンバーが複数回定義されています」というエラーが表示されます。

テーブル名は同じですが、LinqToSQLクラスが完全に異なるデータベースを指しているのでわかりませんが、データコンテキストがそれを別々に保つ必要があるのはなぜですか?

1 つの DataContext を使用してエイリアスを追加しようとしましたが、これが可能かどうかはわかりません。私はASP.NETが初めてです...

            if (DatabaseName == "clincomm_243x")
            {
                using (UserAccountDataContext Data = new UserAccountDataContext()) // database clincomm_243x
                {
                    string UserName = TextBoxUserName.Text.ToUpper();

                    opususer CheckUser = Data.opususers
                        .SingleOrDefault(opususer => opususer.username == UserName && opususer.active == true);
                    if (CheckUser == null || TextBoxUserName.Text.Length ==0)
                    {
                        TextBoxResult.Visible = true;
                        TextBoxResult.Text = "Username " + UserName + " does not exist. Please check and try again!";
                    }
                    else
                    {
                        TextBoxResult.Text = "";
                        TextBoxResult.Text = "User " + UserName + " has been found.";
                        TextBoxResult.Visible = true;
                        TextBoxResult.Visible = true;
                        TextBoxResult.Text += "\nAttempting to update user account details.....\n";

                        // Set the new values for the record returned
                        CheckUser.password = "03ac674216f3e15c761ee1a5e255f067953623c8b388b4459e13f978d7c846f4";
                        CheckUser.hashtype_code = "SHA-256";
                        CheckUser.unsuccessfullogons = 0;
                        CheckUser.active = true;
                        DateTime newPasswordExpiryDate = DateTime.Now.Date.AddYears(10);
                        CheckUser.passwordexpirationdate = newPasswordExpiryDate;
                        Data.SubmitChanges();

                        TextBoxResult.Text += "\nUser Account " + UserName + " has been successfully updated\n";
                        TextBoxResult.Text += "\nPassword has now been set to 1234 and will not expire until " + newPasswordExpiryDate;
                    }
                }
            }
4

1 に答える 1

1

新しいデータコンテキストを使用している場合でも、別の名前空間を指定しない限り、テーブルを表すクラスは同じ名前空間に存在します。各DataContextの「EntityNamespace」プロパティに一意の名前空間を指定してみてください。

于 2012-12-21T06:05:01.220 に答える