-
Notifications
You must be signed in to change notification settings - Fork 588
Description
So here I have my mapper class:
`using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Dapper.Core.Entities;
using DapperExtensions.Mapper;
namespace Dapper.Infrastructure.Mappers
{
public class DeviceMapper : ClassMapper
{
public DeviceMapper()
{
//throw new NotImplementedException();
Schema("dbo");
Table("Devices");
Console.WriteLine("it maps");
AutoMap();
}
}
}
Here is the Device object:
namespace Dapper.Core.Entities
{
public class Device
{
public Guid? Id { get; set; }
public string? Name { get; set; }
public string? TelemetryType { get; set; }
public Device()
{
}
public Device(string name, string telemetryType, Guid? id = null)
{
Id = id ?? Guid.NewGuid();
Name = name;
TelemetryType = telemetryType;
}
}
}Here is where is set the mapper and try to insert the object:
public async Task AddAsync(Device entity)
{
using (IDbConnection db = new SqlConnection(_configuration.GetConnectionString("DefaultConnection")))
{
DapperExtensions.DapperAsyncExtensions.DefaultMapper = typeof(DeviceMapper);
DapperExtensions.DapperExtensions.SetMappingAssemblies
(
new[] { typeof(DeviceMapper).Assembly }
);
db.Open();
Guid id = await db.InsertAsync<Device>(entity);
return id;
}
}
`
And here is how the devices table looks like:
And here is the exception that is thrown when i execute this code:
System.InvalidOperationException HResult=0x80131509 Message=Dapper.Infrastructure.Mappers.DeviceMapper is not a GenericTypeDefinition. MakeGenericType may only be called on a type for which Type.IsGenericTypeDefinition is true. Source=System.Private.CoreLib StackTrace: at System.RuntimeType.MakeGenericType(Type[] instantiation) at DapperExtensions.DapperExtensionsConfiguration.GetMap(Type entityType) at DapperExtensions.DapperAsyncImplementor.<InsertAsync>d__2
1.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at System.Runtime.CompilerServices.TaskAwaiter1.GetResult() at Dapper.Infrastructure.Repositories.DeviceRepository.<AddAsync>d__2.MoveNext() in C:\Users\psane\source\repos\C#\Dapper.WebApi\Dapper.Infrastructure\Repositories\DeviceRepository.cs:line 46 at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task) at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.TaskAwaiter
1.GetResult()
at Dapper.WebApi.Controllers.DeviceController.d__4.MoveNext() in C:\Users\psane\source\repos\C#\Dapper.WebApi\Dapper.WebApi\Controllers\DeviceController.cs:line 42
This exception was originally thrown at this call stack:
[External Code]
Dapper.Infrastructure.Repositories.DeviceRepository.AddAsync(Dapper.Core.Entities.Device) in DeviceRepository.cs
[External Code]
Dapper.WebApi.Controllers.DeviceController.Post(Dapper.Core.Entities.Device) in DeviceController.cs`