2016-09-02 6 views
0

私のプロジェクトでは、すべてのドロップダウンオプションを格納するリストテーブル(すべてがまったく同じ構造です)があります。各テーブルには、すべての変更を追跡する履歴テーブルがあります。別のテーブルに同じオブジェクトを保存します

メインテーブルのレコードを挿入または更新し、履歴テーブルに新しいレコードを追加するための汎用関数を作成したいと考えています。 SQLiteので

私はEFでそれを行うことはできません

public int SaveItem<T>(T item) where T : IMyEntity { 
     lock (locker) { 
      if (item.Id != 0) { 
       database.Update(item); 
       return item.Id; 
      } 
      else { 
       return database.Insert(item); 
      } 
     } 
    } 

のようなものを使用しています。データベースはMySQLです。

+0

で作業している場合は、別のテーブルに同じ型をマッピングすることはできません仕事shoud EFするようにコードを適応について - あなたはいつもタイプをマッピングするので、EFはありませんがありますどのテーブルを使用するかを決定する方法。 ORMの問題です。どのタイプをどのテーブルにマッピングするかを知る必要があります。 – DevilSuichiro

答えて

0

EFではこれが難しい(または不可能かもしれない)一方、Drapperを使用することは絶対に些細なことです。

方法の可能性が高いようになります。_commanderはDrapperのIDbCommanderのインスタンスである

public T Save<T> (T item) where T : IMyEntity 
{ 
    return _commander.Execute(item) ? item : null; 
} 

。この時点から、データベースに項目を挿入または更新するにはSQLを入力してください。&あなたの設定にSQLを入れてください。

非常に単純で、本当に速く、完全にテスト可能です。

0

これはあなたが当然の添付実体

public int SaveItem<T>(T item) where T : IMyEntity { 
    lock (locker) { 
     if (item.Id != 0) { 
      context.Set(typeof(T)).Add(item); 
     } 
     context.SaveChanges(); 
     return item.Id; 
    } 
} 
関連する問題