簡體   English   中英

檢查DbSet <T> 是空的

[英]Check if DbSet<T> is empty

我正在研究一種從json播種EF Core數據庫的方法。 因此,我有一系列方法,可以按如下所示對每個實體FilterListFilterListLanguage是兩個示例實體)。 除了名稱,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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM