Dapper SimpleCRUD приводит: «Невозможно привести объект типа« System.Guid »к типу« System.IConvertible ».» - PullRequest
0 голосов
/ 04 июня 2019

Я строю API для основных операций CRUD на таблице базы данных. Я использую C # в проекте ASP.NET Web API, и мои сервисные классы живут в отдельной библиотеке классов. Dapper и Dapper.SimpleCRUD используются для операций ORM.

Когда я жестко кодирую guid в базу данных, используя DEFAULT NEWID(), мои методы создания работают нормально. Но для лучшей практики я хочу создать новый guid в классе контроллера и затем отправить его в БД. Когда я делаю это, это терпит неудачу.

В контроллере:

var newParty = new Party()
{
    Id = Guid.NewGuid(), //this is when I started getting the cast error
    Name = party.Name,
    CreatedDate = DateTime.Now
};

В хранилище:

public int? Create(Party obj)
{
    using (var connection = new SqlConnection(_connectionString))
    {
        connection.Open();

        var result = connection.Insert(obj);

        return result;
    }
}

Я получаю "Unable to cast object of type 'System.Guid' to type 'System.IConvertible'." ответ.

Вот трассировка стека:

at System.Convert.ToInt64(Object value)\r\n   at Dapper.SimpleCRUD.Insert[TKey](IDbConnection connection, Object entityToInsert, IDbTransaction transaction, Nullable`1 commandTimeout) in C:\\Users\\ecoffman\\Documents\\GitHub\\Dapper.SimpleCRUD\\Dapper.SimpleCRUD\\SimpleCRUD.cs:line 364\r\n   at KC.QMS.CrudRepository`1.Create(T obj) in D:\\Isoright\\src\\WebApp\\KC.QMS\\CrudRepository.cs:line 86\r\n   at KC.QMS.Services.InterestedPartyService.CreateInterestedParty(InterestedParty interestedParty) in D:\\Isoright\\src\\WebApp\\KC.QMS\\Services\\InterestedPartyService.cs:line 27\r\n   at IsoRight.Api.Controllers.InterestedPartyController.CreateInterestedParty(InterestedParty interestedParty) in D:\\Isoright\\src\\Api\\IsoRight.Api\\Controllers\\InterestedPartyController.cs:line 73

1 Ответ

0 голосов
/ 19 июня 2019

Общий метод Insert предназначен для первичных ключей int.Вы можете передать тип в качестве первого параметра.Вот пример:

 connection.Insert<Guid, T>;

Смотрите модульные тесты для этого здесь: h https://github.com/ericdc1/Dapper.SimpleCRUD/blob/master/Dapper.SimpleCRUDTests/Tests.cs#L682

...