Как использовать вложенный объект в качестве параметра запроса для Dapper - PullRequest
0 голосов
/ 17 января 2020

Я использую Dapper вместо Entity Framework. Возникла ошибка при попытке использовать вложенный объект в качестве параметра запроса.

Ошибка выглядит следующим образом:

Член устройства типа App.Model.Device не может быть используется в качестве значения параметра.

Если есть что-то, что я могу улучшить в своей структуре вопроса, оставьте комментарий. Не Bash. Спасибо

У меня есть классы, которые выглядят так:

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; }
}

И запрос вставки A SQL, который выглядит примерно так:

private const string InsertQuery = @"Insert into iot.[Table] (DeviceID,DeviceData,UnixTime) values(@device.id,@data,@time)";

Функция вставки Dapper :

  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;
                    }
                }
            }
        }

1 Ответ

0 голосов
/ 17 января 2020

* обновленный ответ

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);

или

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
    });
...