[英]Check if DbSet<T> is empty
我正在研究一種從json播種EF Core數據庫的方法。 因此,我有一系列方法,可以按如下所示對每個實體FilterList
( FilterList
和Language
是兩個示例實體)。 除了名稱,dbset屬性名稱和實體類型的兩個實例之外,這些方法都是相同的。
private static void SeedFilterLists(FilterListsDbContext context)
{
if (context.FilterLists.Any()) return;
var types = JsonConvert.DeserializeObject<List<FilterList>>(
File.ReadAllText(SeedDirectory + Path.DirectorySeparatorChar + typeof(FilterList).Name + ".json"));
context.AddRange(types);
context.SaveChanges();
}
private static void SeedLanguages(FilterListsDbContext context)
{
if (context.Languages.Any()) return;
var types = JsonConvert.DeserializeObject<List<Language>>(
File.ReadAllText(SeedDirectory + Path.DirectorySeparatorChar + typeof(Language).Name + ".json"));
context.AddRange(types);
context.SaveChanges();
}
我想用一個通用方法替換所有這些重復項。 我已經嘗試過類似下面的方法,但是它還不存在。 我不確定如何引用DbSet屬性。 我可以用什么代替注釋行中的問號,還是有更好的替代方法來查看泛型類型的表是否為空?
//TODO: fix generic method to remove duplication of entity-specific methods
private static void Seed<T>(DbContext context)
{
//if (context.?.Any()) return;
var rows = JsonConvert.DeserializeObject<List<T>>(
File.ReadAllText(SeedDirectory + Path.DirectorySeparatorChar + typeof(T).Name + ".json"));
context.AddRange(rows);
context.SaveChanges();
}
我的DbContext供參考:
public class FilterListsDbContext : DbContext
{
...
public DbSet<FilterList> FilterLists { get; set; }
public DbSet<Language> Languages { get; set; }
...
}
private static void SeedLanguages(FilterListsDbContext context)
{
Seed<Language>(context, c => c.Languages);
}
private static void Seed<T>(FilterListsDbContext context, Func<FilterListsDbContext, DbSet<T>> setFunc) where T : class
{
var set = setFunc(context);
if (set.Any()) return;
}
或只使用DbContext.Set<T>
方法 :
private static void Seed<T>(DbContext context) where T : class
{
var set = context.Set<T>();
if (set.Any()) return;
}
它存在於EF6中,所以我希望它可以在EF Core中使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.