что является правильным способом вставить данные с подзапросом внутри, используя ядро ​​ef - PullRequest
0 голосов
/ 04 декабря 2018

У меня есть .net API, использующий EF Core со следующими объектами следующие объекты

Моя цель - отправить User id в API и на основе этого id приложение должно извлечь name из таблицы User и вставить его в таблицу Name

UserRepository.cs

public int GetNameById(int userId)
{
    var result = _context.User.Where(u => u.Id == userId).Select(u => new { u.Name }).FirstOrDefault();
    ...
}

NameRepository.cs

    public void AddName(Name name)
    {
        _context.Name.Add(name);
    } 
// _context.SaveChanges() later

В контроллере я вызываю их соответствующие службы, а они называют свои соответствующие репозитории.Я сделал поиск и вставку отдельно, чтобы я мог использовать этот метод в будущем.Ядро EF генерирует два запроса, я хотел все это в одном из соображений производительности, как я могу это сделать?Они уже используют один и тот же контекст

Короче говоря, я хочу методы, которые можно использовать повторно и запускать все в одном запросе.(В моем реальном проекте сущности совершенно разные, я изменил их, чтобы было легче понять мою проблему)

1 Ответ

0 голосов
/ 04 декабря 2018

1.метод должен возвращать string значение, а не int, я думаю:

public string GetNameById(int id)
{
  return dbContext.Users.FirstOrDefault(q => q.Id == id)?.Name;
}

в соответствии с вашей моделью:

var name = new Name { Name = "New name" };
name.Id = 0;

, если Name.Id является столбцом IDENTITY, тогда для присвоения комментария Id используется другое значение ...

public void AddName(Name name)
{
  dbContext.Names.Add(name);
}
// dbContext.SaveChanges(); somewhere
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...