C# 如何使用嵌套对象作为Dapper的查询参数
我使用的是Dapper而不是实体框架。当我尝试使用嵌套的 对象作为查询参数 错误如下所示: 类型为App.Model.Device的设备成员不能用作参数值 如果我的问题结构有什么可以改进的,请发表评论。 不要猛击。 谢谢 我有这样的课程:C# 如何使用嵌套对象作为Dapper的查询参数,c#,sql-server,dapper,nested-object,C#,Sql Server,Dapper,Nested Object,我使用的是Dapper而不是实体框架。当我尝试使用嵌套的 对象作为查询参数 错误如下所示: 类型为App.Model.Device的设备成员不能用作参数值 如果我的问题结构有什么可以改进的,请发表评论。 不要猛击。 谢谢 我有这样的课程: public class RootObject { public List<Datum> data { get; set; } } public class Datum { public Device device { get;
public class RootObject
{
public List<Datum> data { get; set; }
}
public class Datum
{
public Device device { get; set; }
public long time { get; set; }
public string data { get; set; }
}
public class Device
{
public string id { get; set; }
}
private const string InsertQuery = @"Insert into iot.[Table] (DeviceID,DeviceData,UnixTime) values(@device.id,@data,@time)";
简洁的插入功能:
public CreateCommand(List<Datum> Datums)
{
_Datums = Datums;
}
public void Execute()
{
Insert();
}
private void Insert()
{
using (var connection = DatabaseConfiguration.SqlServer())
{
using (var transaction = connection.BeginTransaction())
{
try
{
connection.Execute(InsertQuery, _Datums, transaction);
transaction.Commit();
}
catch (Exception)
{
transaction.Rollback();
throw;
}
}
}
}
public CreateCommand(列出基准)
{
_基准=基准;
}
public void Execute()
{
插入();
}
专用空白插入()
{
使用(var connection=DatabaseConfiguration.SqlServer())
{
使用(var transaction=connection.BeginTransaction())
{
尝试
{
执行(插入查询、_数据、事务);
Commit();
}
捕获(例外)
{
transaction.Rollback();
投掷;
}
}
}
}
*更新答案
var ro = RootObject.Init(cnnStr, commandTimeout: 100);
Device dev = new Device{id="123456"}
long unixtime = long unixTimestamp = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1,> 1))).TotalSeconds;
Datum dat = new Datum{device=dev,time=unixtime,data="abcdef"};
dat.id = ro.Datum.Insert(dat);
或者
哦,这就是问题中的一个拼写错误。不过谢谢你指出这一点。然而,问题仍然存在,我将用dapper更新我的问题,以澄清我使用的框架。
string insertQuery = @"Insert into iot.[Table] (DeviceID,DeviceData,UnixTime) values(@id,@data,@time)";
var result = db.Execute(insertQuery, new
{
Device.ID,
strData,
(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds
});