Можно ли использовать код DbContext для доступа к данным JSON из WebApi? - PullRequest
0 голосов
/ 25 октября 2018

У меня есть веб-приложение ASP.NET Core 2.1, которое я создал, выполнив действия, описанные в веб-приложении Создание страниц Razor в документах ASP.NET Core.Все прошло, как ожидалось, и я использовал localdb по умолчанию, который был создан, когда я строил модель.Эта часть в порядке.

Однако мне нужно попытаться использовать один и тот же общий код в производственной среде, где все функции CRUD выполняются путем вызова методов WebApi с использованием данных JSON, которые непосредственно соответствуют объектам моей модели.

Например, страница, созданная с помощью лесов для создания, выглядит так:

public async Task<IActionResult> OnPostAsync()
{
    if (!ModelState.IsValid)
    {
        return Page();
    }

    _context.Registration.Add(Registration); // Here
    await _context.SaveChangesAsync();       // Here

    return RedirectToPage("./Index");
}

и

public async Task OnGetAsync()
{
    Registration = await _context.Registration.ToListAsync(); // Here
}

Возможно или даже возможно просто изменитькаждое вхождение операций _context, таких как строки, помеченные "// Здесь", чтобы использовать вызовы методов WebApi?Есть ли лучший способ выполнить то, что я пытаюсь сделать?

1 Ответ

0 голосов
/ 25 октября 2018

Вы можете работать только с классами сущностей.Однако вы можете преобразовать JSON в экземпляр одного из ваших классов сущностей.Например:

using (var response = await _client.GetAsync("/foo/1"))
{
    var foo = await response.ReadAsAsync<Foo>();
    _context.Add(foo);
    await _context.SaveChangesAsync();
}

Метод ReadAsAsync является синтаксическим сахаром, который просто читает ответ в виде строки и затем передает его в JSON.NET для преобразования в указанный тип.Если у вас есть только строка JSON, вы можете вместо этого использовать:

var foo = JsonConvert.DeserializeObject<Foo>(jsonString);

Тем не менее, это запах кода.Если ваш API уже взаимодействует с вашими классами сущностей, вся работа должна быть выполнена там.Если вы хотите добавить новый объект, для этого должна быть конечная точка в вашем API.Аналогично для всех других операций CRUD.Наличие двух разных приложений, работающих с одним и тем же контекстом и только по частям, - это путь к катастрофе.

...