【发布时间】:2018-11-25 23:53:00
【问题描述】:
出错了
"Guid 应包含 32 位数字和 4 个破折号 (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx)"
GUID 输入为“68f0eaed-189e-4c65-8cf8-475539d6f21b”
context.Countries.AddRange(GetCountryData(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "csv", "country.csv")));
await context.SaveChangesAsync();
public List<Data.Country> GetCountryData(string filePath)
{
string csvRead = File.ReadAllText(filePath);
string[] csvFileRecord = csvRead.Split('\n');
List<Data.Country> dataRecordList = new List<Data.Country>();
foreach (var row in csvFileRecord.Skip(1))
{
if (!string.IsNullOrEmpty(row))
{
var cells = row.Split(',');
var dataRecord = new Data.Country
{
Id = Guid.Parse(cells[0]),
Code = cells[1],
Name = cells[2]
};
dataRecordList.Add(dataRecord);
}
}
return dataRecordList;
}
CSV 文件
"id","code","name"
"68f0eaed-189e-4c65-8cf8-475539d6f21b","AX","Åland Islands"
"76cf600f-7bf6-40fb-8803-142eac60f3dd","AL","Albania"
...
EDITED 更新了代码,它现在获得了正确的 GUID 值,但仍然出现错误
My input "68f0eaed-189e-4c65-8cf8-475539d6f21b"
fail: MyApp.ContextSeed[0]
Guid should contain 32 digits with 4 dashes (xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx).
info: Microsoft.EntityFrameworkCore.Database.Command[20101]
Executed DbCommand (1ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
SELECT CASE
WHEN EXISTS (
SELECT 1
FROM public.country AS c)
THEN TRUE::bool ELSE FALSE::bool
END
【问题讨论】:
-
Guid.Parse在您在问题中显示的字符串上工作得很好;所以:我们必须推断出cells[1]的值实际上不是您认为的字符串。所以:准确地写出值是什么,包括任何前导/尾随空格。也许if(!Guid.TryParse(cells[1], out var guid)) Console.WriteLine($"'{cells[1]}'"); -
我试过 68f0eaed-189e-4c65-8cf8-475539d6f21b 它工作正常。可能你的行不正确
-
您确定 Guid 在第 1 列而不是 0 列吗?索引从 0 开始计数...
-
已编辑见上面的 csv 文件格式
-
@HansKesting 是的 guid 是 0 而不是 1 :) ...但是跳过不起作用!
标签: c# asp.net postgresql entity-framework-core guid