Как бы вы сделали вызовы EF универсальными? - PullRequest
0 голосов
/ 27 марта 2019

У меня есть этот пример кода (.NET Core 2.2):

private void IterateSave(List<TokenMaster> items, int min, int max)
{
    int skip = min;
    int take = max / 5;
    while (skip <= max)
    {
        try
        {
            var subItems = items.Skip(skip).Take(take).ToList();
            _db.TokenMasters.AddRange(subItems); // <---
            _db.SaveChanges();
            skip += take;
        }
        catch (Exception ex)
        {
            Log.Error(ex, "Error saving this data batch! {RecordCount}", take);
            IterateSave(items, skip, take);
        }
    }
}

private void IterateSave(List<Attributes> items, int min, int max)
{
    int skip = min;
    int take = max / 5;
    while (skip <= max)
    {
        try
        {
            var subItems = items.Skip(skip).Take(take).ToList();
            _db.Attributes.AddRange(subItems); // <---
            _db.SaveChanges();
            skip += take;
        }
        catch (Exception ex)
        {
            Log.Error(ex, "Error saving this data batch! {RecordCount}", take);
            IterateSave(items, skip, take);
        }
    }
}

Как бы вы превратили это в один общий вызов?Я борюсь с необходимостью DbSet и Model.

1 Ответ

2 голосов
/ 27 марта 2019

Разве это не так просто, как:

private void IterateSave<T>(List<T> items, int min, int max) where T : class
{
    int skip = min;
    int take = max / 5;
    while (skip <= max)
    {
        try
        {
            var subItems = items.Skip(skip).Take(take).ToList();
            _db.Set<T>().AddRange(subItems);
            _db.SaveChanges();
            skip += take;
        }
        catch (Exception ex)
        {
            Log.Error(ex, "Error saving this data batch! {RecordCount}", take);
            IterateSave(items, skip, take);
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...