将 Dapper 与具有 1 个参数的构造函数一起使用时,对象 return 作为默认值
Objects return as Defaults when using Dapper with a Constructor with 1 Parameter
我正在尝试使用 1 个参数调用构造函数。没有构造函数参数 returns 的查询符合预期的值。但是,如果我想用附加参数调用 class,我会得到预期的结果计数,但这些值都设置为默认值。
Employee.cs
public Employee(AppSettings appSettings)
{
employeeRepo = new EmployeeRepo(appSettings);
}
public Employee()
{
}
存储库中的数据库调用
using (SqlConnection dbConnection = new SqlConnection(ConnectionString))
{
string sQuery = "select * from dbo.tblEmployees";;
var result = dbConnection.Query<Employee>(sQuery).Select(row => new Employee(_appSettings));
var result2 = dbConnection.Query<Employee>(sQuery);
}
var Result - With empty Constructor
var Result2 - Calling constructor with parameter
我已经尝试了上述的各种实现。我最初被这个 post 带到了自定义构造函数调用:Call custom constructor with Dapper?
我还尝试完全限定 select 语句,但基于此 post,这似乎也不起作用:Dapper strongly typed Query returning default object values
我也试过:
var result3 = dbConnection.Query<dynamic>(sQuery).Select(row => new Employee(_appSettings));
但是每当我开始使用带参数的构造函数时,我都会取回所有对象的默认值。
您应该在 .Select
方法中包含 属性 个集合。例如:
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
public AppSettings Settings { get; set; }
public Employee() { }
public Employee(AppSettings appSettings) { Settings = appSettings; }
...
var result = dbConnection.Query<Employee>(sQuery).Select(row => new Employee(settings) {Id = row.Id, Name = row.Name});
}
您还可以使用 AutoMapper 来避免复杂的 setter 调用:
var config = new MapperConfiguration(cfg => cfg.CreateMap<Employee, Employee>()
.ForMember(x => x.Settings, opt => opt.Ignore()));
var mapper = config.CreateMapper();
var result = dbConnection.Query<Employee>(sQuery).Select(row =>
{
var obj = new Employee(settings);
return mapper.Map(row, obj);
});
我正在尝试使用 1 个参数调用构造函数。没有构造函数参数 returns 的查询符合预期的值。但是,如果我想用附加参数调用 class,我会得到预期的结果计数,但这些值都设置为默认值。
Employee.cs
public Employee(AppSettings appSettings)
{
employeeRepo = new EmployeeRepo(appSettings);
}
public Employee()
{
}
存储库中的数据库调用
using (SqlConnection dbConnection = new SqlConnection(ConnectionString))
{
string sQuery = "select * from dbo.tblEmployees";;
var result = dbConnection.Query<Employee>(sQuery).Select(row => new Employee(_appSettings));
var result2 = dbConnection.Query<Employee>(sQuery);
}
var Result - With empty Constructor
var Result2 - Calling constructor with parameter
我已经尝试了上述的各种实现。我最初被这个 post 带到了自定义构造函数调用:Call custom constructor with Dapper?
我还尝试完全限定 select 语句,但基于此 post,这似乎也不起作用:Dapper strongly typed Query returning default object values
我也试过:
var result3 = dbConnection.Query<dynamic>(sQuery).Select(row => new Employee(_appSettings));
但是每当我开始使用带参数的构造函数时,我都会取回所有对象的默认值。
您应该在 .Select
方法中包含 属性 个集合。例如:
public class Employee
{
public int Id { get; set; }
public string Name { get; set; }
public AppSettings Settings { get; set; }
public Employee() { }
public Employee(AppSettings appSettings) { Settings = appSettings; }
...
var result = dbConnection.Query<Employee>(sQuery).Select(row => new Employee(settings) {Id = row.Id, Name = row.Name});
}
您还可以使用 AutoMapper 来避免复杂的 setter 调用:
var config = new MapperConfiguration(cfg => cfg.CreateMap<Employee, Employee>()
.ForMember(x => x.Settings, opt => opt.Ignore()));
var mapper = config.CreateMapper();
var result = dbConnection.Query<Employee>(sQuery).Select(row =>
{
var obj = new Employee(settings);
return mapper.Map(row, obj);
});