#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