2

目標

ユーザーのテーブルを一貫して更新します。

問題

特定のユーザーの情報を編集する必要があり、その方法がわかりません。

  • まず、Users私のアプリケーションには、一部のユーザーのすべての情報を格納するテーブルがあります。

  • 第二に、これを再帰的に考えることができません。テーブルには複数の列がありUsers、ユーザーが要求した列だけを編集する方法がわかりません。何か案が?

私が本当に欲しいものは何ですか?

C# を使用してクエリを実行していません。データベースから必要なものはすべて、ストアド プロシージャを介して取得されました。.Select()( 、 などの基本を除くFirstOrDefault())。つまり、次の 2 つのものが必要です。

  1. (MySQL) 再帰クエリ構文のアイデア。
  2. 次のようにストアド プロシージャを呼び出す C# メソッドが必要です。

User user = new User("chiefmaster@test.com"); // The target of the update.
UpdateUser
    (user.Email => "masterchief@test.com", // the old is "chiefmaster@test.com"
     user.Nickname => "MasterChief" // the old is "ChiefMaster");

ご覧のとおり、特定のユーザーのEmailと を更新してNicknameいます — これは他のユーザーの情報には影響しません。

アイデアやフォローする方法を教えてください。

4

2 に答える 2

1

There are lots of ways of solving this, what have you tried? You can for example use an ORM, which handles this for you.

You can also manually implement dirty flags per property and save only the changed properties.

Or you can create a method UpdateUserEmailAndNickname(User user, string newEmail, string newNickname).

于 2013-08-23T15:59:42.277 に答える
1

空のパラメーターを受け取ったときに以前の値を保持するストアド プロシージャを作成することをお勧めします。

create procedure UpdateUser(IN idUpdate INT, IN newEmail varchar(30), IN newNick varchar(30))
begin

DECLARE prevEmail varchar(30);
DECLARE prevNick varchar(30);

DECLARE updEmail varchar(30);
DECLARE updNick varchar(30);

select email into prevEmail, nick into prevNick 
from USERS 
where id = idUpdate

if(newEmail = '')
    set updEmail = prevEmail
else
    set updEmail = newEmail

if(newNick = '')
    set updNick = prevNick
else
    set updNick = newNick

update USERS 
set email = updEmail, nick = updNick
where id = idUpdate;

end;

このプロシージャを呼び出すときは、すべてのパラメーターを渡す必要がありますが、列が更新されていないことを検出した場合は、空の文字列 (またはストア プロシージャを調整する null 値) として渡すだけです。

もちろん、必要に応じてさらにパラメーターを追加し、さらに変数を宣言して、この例を調整する必要があります

于 2013-08-23T16:00:38.130 に答える