2017-11-12 4 views
1

私は現在、ダッパーを介してMySQL DBを使って作業をセットアップしようとしています。C#ダッパーのPOCOとDapper.Fluent EntityMapを引数として渡します。

私はDapperのためPOCOを宣言している:私もそのテーブルのためDapper.Fluent EntityMapを持って

public class DevicesOnTesterDbTable 
{ 
    public string UUID { get; set; } 
    public string DeviceType { get; set; } 
    public string DeviceAddedAt { get; set; } 
    public uint Address { get; set; } 
} 

約10のテーブルを持っているので、私は、POCOの10ペアを持っている

public class DevicesOnTesterDbTableMap : EntityMap<DevicesOnTesterDbTable> 
{ 
    public DevicesOnTesterDbTableMap() 
    { 
     Map(p => p.UUID).ToColumn("devices_on_tester_uuid"); 
     Map(p => p.DeviceType).ToColumn("devices_on_tester_type"); 
     Map(p => p.DeviceAddedAt).ToColumn("devices_on_tester_add_at"); 
     Map(p => p.Address).ToColumn("devices_on_tester_address"); 
    } 
} 

私のデータベースとそれらのEntityMapクラス。だから、読み出しの場合には、私は各テーブルに対して、このような何かを実行する必要があります。

public static List<DevicesOnTesterDbTable> ReadDevices(string server) 
{ 
    FluentMapper.Initialize(config => 
    { 
     config.AddMap(new DevicesOnTesterDbTableMap()); 
    }); 

    try 
    { 
     using (var mySqlConnection = OpenConnection(server)) 
     { 
      mySqlConnection.Open(); 
      return mySqlConnection.Query<DevicesOnTesterDbTable>("Select * from power_source_calibration").ToList(); 
     } 
    } 
    catch (Exception e) 
    { 
     Console.WriteLine(e); 
     throw; 
    }   
} 

さて、このような等の読み取り\書き込み\更新などの一般的な操作を実行しますいくつかの他の方法には、このペアを渡す方法はありますか?それとももっと良い方法がありますか?

答えて

1

もっと良い方法があります。実際にあなたはそれを間違っている。

ReadDevicesのように、それぞれの方法でFluentMapper.Initializeに電話する必要はありません。理想的には、(すべてのエンティティの)すべてのマッピングは、アプリケーションの起動時に1回だけ実行する必要があります。続き

hereからです:

アプリケーションの開始であなたのマッピングを初期化します。

FluentMapper.Initialize(config => 
{ 
    config.AddMap(new InvoiceMap()); 
}); 

また、アプリケーションの起動時にそれを行う方法を示してthis質問を参照してください。 staticRegister()メソッドを参照し、呼び出し元はアプリケーションの起動時にどこかで呼び出します。

+0

はい、実際に私を助けました!ありがとうございました! – Shooshp