我目前正在尝试通过 dapper 设置 MySQL 数据库。
我已经为 dapper 声明了 POCO:
public class DevicesOnTesterDbTable
{
public string UUID { get; set; }
public string DeviceType { get; set; }
public string DeviceAddedAt { get; set; }
public uint Address { get; set; }
}
我还有那个表的 Dapper.Fluent EntityMap:
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");
}
}
我的数据库有大约十个表,所以我有十对 POCO 和 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;
}
}
现在有没有办法将这个对传递给其他一些执行常见操作(如读\写\更新等)的方法?或者也许有更好的方法?
最佳答案
有更好的方法;实际上你做错了。
您不需要在每个方法中调用 FluentMapper.Initialize
,例如 ReadDevices
。理想情况下,您的所有映射(针对所有实体)应该只在您的应用程序启动时发生一次。
以下来自here :
Initialize your mapping at the start of your application.
FluentMapper.Initialize(config => { config.AddMap(new InvoiceMap()); });
另请参阅 this显示如何在应用程序启动时执行此操作的问题。引用 Register()
方法,它是 static
并且调用者在某个地方的应用程序启动时调用它一次。
关于C# 将 Dapper POCO 和 Dapper.Fluent EntityMap 作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47247891/