我正在尝试将 CSV 文件中的测试数据加载到可以加载到内存中 EF Core DB 上下文中的记录中。
我有一个简化的实体,如下所示:
public class Project
{
public int { get; set; }
public Owner? Owner { get; set; } = null;
}
Run Code Online (Sandbox Code Playgroud)
A类图:
public class ProjectsClassMap : CsvHelper.Configuration.ClassMap<Projects>
{
public ProjectsClassMap()
{
AutoMap(CultureInfo.CurrentCulture);
Map(m => m.Owner).Ignore();
}
}
Run Code Online (Sandbox Code Playgroud)
然后是一个加载数据的函数,如下所示:
private void LoadTestData<T>(string fileName, InMemoryEFCoreDbContext db, Type? classMap = null)
where T : class
{
var data = GetTestData(fileName);
var readerConfig = new CsvConfiguration(CultureInfo.CurrentCulture) {
Delimiter = ",",
PrepareHeaderForMatch = (r, c) => r.Replace(" ", …Run Code Online (Sandbox Code Playgroud) 看起来 EF 正在将零填充到我试图保存的值,然后引发异常。这是我的代码:为什么值为 10.17 的总小时数字段超出了小数(6,5)值类型的范围以及为什么它用零填充该值?直接使用SQL Server Management Studio保存这个值似乎没有问题,所以看起来更像是EF的问题。
这是来自数据库第一个 .edmx 文件。我尝试过将比例和精度设置为无。两者都没有工作
var rVal = new Data.FactPayrollHour()
{
BereavementHours = 0.0M,
CostCenter = "MyCostCenter",
Department = "MyDepartment",
EmergencyHours = 0.0M,
HomeGroupCode = "MyHomeGroup",
PayrollEmployeeId = employees.FirstOrDefault().Id,
PayType = "MyPayType",
PunchDateKey = dateDims.FirstOrDefault().ID,
Schedule = "",
ServiceHours = 0.0M,
Shift = "",
ShortTermHours = 0.0M,
TimePolicy = "",
TotalHours = 10.17M,
UnpaidHours = 0.0M,
VacationHours = 0.0M
};
db.FactPayrollHours.Add(rVal);
db.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
异常消息是:Parameter value '10.17000' is out of range.
堆栈跟踪:
at System.Data.SqlClient.TdsParser.TdsExecuteRPC(SqlCommand cmd, …Run Code Online (Sandbox Code Playgroud)