【发布时间】:2017-05-18 20:54:01
【问题描述】:
我有 2 个简单的模型类:
public class Category
{
public int Id { get; set; }
public string Description { get; set; }
public ICollection<SubCategory> SubCategories { get; set; }
}
public class SubCategory
{
public int Id { get; set; }
public string Description { get; set; }
public Category Category { get; set; }
}
还有一个简单的上下文:
public class SeederContext : DbContext
{
public DbSet<Category> Categories { get; set; }
public DbSet<SubCategory> SubCategories { get; set; }
}
我正在尝试播种以下 csv 文件
BetCategories.csv:
Id,Description
1,Sports
2,Politics
BetSubCategories:
Id,Category_Id,Description
1,1,Soccer
2,1,Basketball
3,1,Tennis
4,1,Poker
5,2,Election
我使用CsvHelper构建了一个播种机:
public void Seed(SeederContext context)
{
SeedTable<Category>("../../Data/BetCategories.csv", t =>
{
context.Categories.AddOrUpdate(c => c.Id, t);
context.SaveChanges();
});
SeedTable<SubCategory>("../../Data/BetSubCategories.csv", t =>
{
context.SubCategories.AddOrUpdate(c => new { c.Description}, t);
context.SaveChanges();
});
}
public void SeedTable<T>(string path, Action<T[]> callback)
{
var filename = path;
if (filename != null)
using (var reader = new StreamReader(filename, Encoding.UTF8))
{
var csvReader = new CsvReader(reader);
csvReader.Configuration.WillThrowOnMissingField = false;
var list = csvReader.GetRecords<T>().ToArray();
callback(list);
}
}
播种子类别时出现问题。
在第一个种子 (Categories) 上运行正常,并将 2 个类别写入数据库。
在第二个种子上,SubCategories 正常,5 个子类别被写入数据库。但是,它们也被写入Categories 表 - 所以现在我总共有 2+5=7 个类别。
我不确定自己做错了什么。
这是一个非常简单的代码优先,根本不需要配置。
请指教。
小更新
手动播种时 - 它可以工作
SeedTable<Category>("../../Data/BetCategories.csv", t =>
{
context.Categories.AddOrUpdate(c => c.Id, t);
context.SaveChanges();
});
var subCategory = new SubCategory
{
Category = context.Categories.FirstOrDefault(c => c.Description == "Sports"),
Description = "Soccer"
};
context.SubCategories.AddOrUpdate(c => c.Description, subCategory);
context.SaveChanges();
subCategory = new SubCategory
{
Category = context.Categories.FirstOrDefault(c => c.Description == "Sports"),
Description = "Basketball"
};
context.SubCategories.AddOrUpdate(c => c.Description, subCategory);
context.SaveChanges();
【问题讨论】:
-
合并。这就是我使用 AddOrUpdate 的原因
标签: c# entity-framework csvhelper