如何在 C# 中将 T 类型的模型转换为 'System.Dynamic.ExpandoObject'?
How to cast a model of T type to 'System.Dynamic.ExpandoObject' in C#?
我正在尝试在 class Job.cs
中添加一些参数
namespace Test
{
public class Job
{
public int Id { get; set; }
public int JobId { get; set; }
public int JobPropertyType { get; set; }
public string JobValue { get; set; }
}
}
我正在使用 Dapper 在 table 中插入数据。
Repository.cs
public async Task<T> Add(T entity)
{
using (var connection = await _connectionFactory.GetConnectionAsync())
{
return await connection.InsertAsync<T>(entity);
}
}
我已经使用 DapperMapper 来映射 table 和数据。
Mapper.cs
public class JobMapper: ClassMapper<Job>
{
public JobMapper()
{
Schema("Job");
Table("Job");
Map(m => m.JobId).Column("JobId");
Map(m => m.JobPropertyType).Column("JobPropertyType");
Map(m => m.JobValue).Column("JobValue");
}
}
这里是JobService.cs
public async Task<Job> InsertJob(int jobId, int jobPropertyType, string jobValue)
{
var job = new Job
{
JobId = jobId,
JobPropertyType = jobPropertyType,
JobValue = jobValue
};
return await this.Repository.Add(job);
}
另一个服务发送数据
public async Task AddJob(int jobId, string snapshot)
{
if (!string.IsNullOrEmpty(snapshot))
{
await _jobService.InsertJob(jobId, (int)JobPropertiesEnum.Snapshot, snapshot);
}
当我尝试在此处插入数据时,出现此异常:
Message=无法在插入时将类型 'System.Dynamic.ExpandoObject' 隐式转换为 'Test.Job'。(存储库中的 InsertyAsync())
如何转换成Dynamic.ExpandoObject?
我假设您正在使用此处的 Dapper-Extensions:https://github.com/tmsmith/Dapper-Extensions/tree/master/DapperExtensions
InsertAsync returns 一个 Task,dynamic 是一个 ExpandoObject,所以当您尝试获取 return 值时,您的问题就出现了。 return 值是插入实体的键。
你可以把你的代码改成这样(我没时间测试):
public async Task<T> Add(T entity)
{
using (var connection = await _connectionFactory.GetConnectionAsync())
{
var result = await connection.InsertAsync<T>(entity);
entity.Id = (int) result;
return entity;
}
}
我正在尝试在 class Job.cs
中添加一些参数namespace Test
{
public class Job
{
public int Id { get; set; }
public int JobId { get; set; }
public int JobPropertyType { get; set; }
public string JobValue { get; set; }
}
}
我正在使用 Dapper 在 table 中插入数据。 Repository.cs
public async Task<T> Add(T entity)
{
using (var connection = await _connectionFactory.GetConnectionAsync())
{
return await connection.InsertAsync<T>(entity);
}
}
我已经使用 DapperMapper 来映射 table 和数据。 Mapper.cs
public class JobMapper: ClassMapper<Job>
{
public JobMapper()
{
Schema("Job");
Table("Job");
Map(m => m.JobId).Column("JobId");
Map(m => m.JobPropertyType).Column("JobPropertyType");
Map(m => m.JobValue).Column("JobValue");
}
}
这里是JobService.cs
public async Task<Job> InsertJob(int jobId, int jobPropertyType, string jobValue)
{
var job = new Job
{
JobId = jobId,
JobPropertyType = jobPropertyType,
JobValue = jobValue
};
return await this.Repository.Add(job);
}
另一个服务发送数据
public async Task AddJob(int jobId, string snapshot)
{
if (!string.IsNullOrEmpty(snapshot))
{
await _jobService.InsertJob(jobId, (int)JobPropertiesEnum.Snapshot, snapshot);
}
当我尝试在此处插入数据时,出现此异常:
Message=无法在插入时将类型 'System.Dynamic.ExpandoObject' 隐式转换为 'Test.Job'。(存储库中的 InsertyAsync())
如何转换成Dynamic.ExpandoObject?
我假设您正在使用此处的 Dapper-Extensions:https://github.com/tmsmith/Dapper-Extensions/tree/master/DapperExtensions
InsertAsync returns 一个 Task
你可以把你的代码改成这样(我没时间测试):
public async Task<T> Add(T entity)
{
using (var connection = await _connectionFactory.GetConnectionAsync())
{
var result = await connection.InsertAsync<T>(entity);
entity.Id = (int) result;
return entity;
}
}