1

データベーステーブルを表すクラス(エンティティ)がいくつかあります

public class ALBUM
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Tracks { get; set; }
}
public class BOOK
{
    public int Id { get; set; }
    public string Author { get, set; }
}

次に、それぞれのストアドプロシージャのパラメータを取得するには、挿入、更新、

public Command getParameters(string spName, dynamic entity, Connection conn)
{
   Command cmd = conn.CreateCommand();
   cmd.CommandType = CommandType.StoredProcedure;
   cmd.CommandText = spName;

   // Get properties (fields) from entity (table)
   PropertyInfo[] properties = entity.GetType().GetProperties();

   for (int = 0; i < properties.Length; i++)
   {
       // here I set Parameters: name, DBType, and Value from properties
   }
}

今私は電話します

public void Some()
{
   ALBUM someAlbum = new ALBUM();
   BOOK anyBook = new BOOK();      // all respective data from DB is set

   Command newCommand = getParameters("myAlbumSP", someAlbum, myConnection);
   Command newCommand = getParameters("mySPBooks", anyBook, myConnection);
}

動的ではなく、「エンティティ」パラメータを他にどのように定義しますか?
それはうまくいきます、ただ私はそれをする他の方法を探しています、私はたくさんあると確信しています。

4

2 に答える 2

2

あなたの場合、そうである必要entityはありません(それは確かにOKですが)。代わりに使用するだけで十分です。なぜなら、あなたが与えるもの以外には何も呼び出さないからです。リフレクションを使用するため、これは機能します。一方、を使用すると、にないプロパティを指定でき、コンパイラは文句を言いません。dynamicobjectobjectdynamicobject

たとえば、ALBUMBOOKにはIdパラメータがあるため、次のように記述できます。

var entityId = entity.Id;

entityこれはdynamic、;である限り機能します。では機能しませんobject

于 2013-03-16T00:27:00.893 に答える
0

ExpandoObjectクラスを使用できます。Paul Sasikが言ったように:

Expandoは、実行時にメンバーを追加/削除することで動的データを処理するように設計された動的タイプです。dynamicは、PythonやJavaScriptなどの動的型付け言語とインターフェイスするときに.NETが型と相互運用できるように設計されています。

https://stackoverflow.com/a/3540291/322848

ExpandoObjectについて説明している記事は次のとおりです。

http://blogs.msdn.com/b/csharpfaq/archive/2009/10/01/dynamic-in-c-4-0-introducing-the-expandoobject.aspx

于 2013-03-16T02:11:25.517 に答える