HeuteDb heute = new HeuteDb();
string filePath = @"C:\Users\Elias\Desktop\ASPlearning\DATA\Data.csv";
using (StreamReader reader = new StreamReader(filePath))
{
string line;
while ((line = reader.ReadLine()) != null)
{
List<string> items = line.Split(';').ToList();
heute.Uhrzeit = items[0];
heute.Energie = items[1];
_context.HeutesDb.Add(heute);
_context.SaveChanges();
}
}
我有一个CSV文件,我想将其存储到我的数据库中。其中有一个被设置为主键的ID
以及Uhrzeit
和Energie
值。
在CSV文件的每一行之后,我将更改保存到数据库中。它只保存数据库中的第一行,然后抛出一个错误。
将CSV文件保存到数据库中的最佳方法是什么?
2条答案
按热度按时间flseospp1#
看看你的圈
您一次又一次地向数据库中添加相同的示例 heute,但示例是相同的,因此在第一次成功插入之后,EF会自动将属性ID(假定包含IDENTITY值)设置为执行第一次插入时获得的值。
在下一个循环中,再次传递同一示例(仍具有上一个循环中设置的ID属性)以进行添加,但此时引擎拒绝插入,因为除非为表调用 SET IDENTITY_INSERT 'tablename' ON,否则不应设置ID值。
只需在循环中移动 heute 变量的初始化就可以解决这个问题。
型
现在,在每个循环中,heute 示例及其ID属性都是新的,没有前一个循环的任何剩余内容,并且数据库引擎将插入您的记录。
bn31dyow2#
您可能需要在数据库中设置Identity列的自动增量(值自动增加1),或者需要在插入时指定Identity列的值,
第一个条目保存成功,因为int数据类型的默认值为0,由于0不作为条目存在,因此允许保存(下一个记录需要不同的ID)