Как мне получить количество строк из моей базы данных после того, как я собрал ее с помощью EntityFrameworkCore

#c# #sql-server #entity-framework-core

#c# #sql-сервер #entity-framework-core

Вопрос:

я пытаюсь научиться работать с EntityFrameworkCore для академического проекта, и я застрял в манипулировании моей каркасной базой данных как есть (на c #).

например, я создаю простой REST api, который будет повторно обрабатывать количество пользователей в моей базе данных (Sql-Server).

   [HttpGet("(Id)")]
    public String GetAdminList(int Id)
    {

        return "get me " Id " admins !";
    }
 
 public class IndexModel : PageModel
{
    private readonly RAZORING.Models.DBContextClass _context;

    public IndexModel(RAZORING.Models.DBContextClass context)
    {
        _context = context;
    }

    public IList<AdmUser> AdmUser { get;set; }

    public async Task OnGetAsync()
    {
        AdmUser = await _context.AdmUsers
            .Include(a => a.AdmUserAdmRoleFk1Navigation)
            .Include(a => a.AdmUserCfgTierFk1Navigation).ToListAsync();
    }
}
 

это indexModel для страницы razor, на которой указана рассматриваемая таблица

Каркасная база данных находится в другом проекте в том же решении, и я ссылался на нее, но я даже не знаю, с чего начать, чтобы иметь возможность манипулировать таблицами, я создал веб-приложение razor mvs, чтобы подтвердить, что оно работает, но это все.

Любая помощь была бы очень признательна даже с документацией, поскольку я не нашел много информации в Интернете

Ответ №1:

Количество пользователей AdmUsers в базе данных будет задано:

 _context.AdmUsers.Count();
 

EF примет этот LINQ и переведет его в SELECT COUNT(*) FROM AdmUsers

Вы не «манипулируете таблицами» как таковыми; вы рассматриваете вещи как наборы сущностей и оставляете EF беспокоиться о «манипулировании таблицами» (создании SQL, который манипулирует данными в таблицах). Например, это «манипулирует таблицей [сущностью]»:

 var u = _context.admUsers.Find(1234); //retrieve user 1234
u.FirstName = "Hello"; //change name
_context.SaveChanges(); //write new name to db. note, if you're in a position to be using async, then `await _context.SaveChangesAsync()` may be better
 

Это работает, потому что, когда вы загружаете пользователя 1234, EF отслеживает его. Если вы измените его свойства, EF увидит изменения и сможет их сохранить

Многие вещи, которые вы можете сделать с помощью LINQ, будут переведены в запросы. Получение всех пользователей в городе:

 var usrs = _context.Users.Where(u => u.City == "Chicago").ToArray();

//probably becomes SELECT * FROM Users WHERE City = 'Chicago'
 

Переместить всех в Нью-Йорк:

 foreach(var u in usrs)
  u.City = "New York";
_context.SaveChanges();
 

Иногда EF не может перевести используемые вами выражения, поэтому вы получите сообщение об ошибке:

 var twentyYrOlds = _context.Users.Where(u => u.Age.ToString("00").Substring(0, 1) == "2").ToArray();
 

Здесь вполне вероятно (я никогда не скажу никогда), что EF не смог перевести toString с форматированием и последующей подстрокой в эквивалент SQL. Вам нужно написать запрос по-другому, чтобы он мог быть переведен:

 var twentyYrOlds = _context.Users.Where(u => u.Age >= 20 amp;amp; u.Age < 30).ToArray();
 

Комментарии:

1. Спасибо! я буду использовать эту информацию, чтобы лучше понять EF