Минимальный API и сложный объект с использованием основного ядра Entity FrameworkC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Минимальный API и сложный объект с использованием основного ядра Entity Framework

Сообщение Anonymous »

У меня есть приложение в .net9 и Blazor , которое раскрывает минимальные API. Упрощенные модели, которые я использую, являются следующими: client имеет все детали нормального клиента. Некоторые поля поступают из другой таблицы, где у меня есть список записей. Например, я хочу сохранить в школе школе человека, и у меня есть свойство, которое указывает на объект школы , где я ожидаю иметь идентификатор Школа в другом столе. Другие поля - это список записей из другой таблицы, таких как канал , и в этом случае я ожидаю найти таблицу соединения с несколькими записями, каждый из которых имеет идентификатор от клиента и один из канала . Вот модели: < /p>

Код: Выделить всё

public class Client {
public School? School { get; set; }
public IList? Channels { get; set; }
}

public class Channel
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long ID { get; set; }

public string Name { get; set; } = string. Empty;
}

public class School
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public long ID { get; set; }

public string Name { get; set; } = string. Empty;
}
Теперь я сгенерировал минимальный API для клиента , используя инструмент для каркасов. API получает полный JSON для всех свойств объекта клиента . School и список канала (я передал в списке 2 пункта) в JSON. Первый результат - следующее: < /p>

Код: Выделить всё

group.MapPut("/{id}", async Task (long id,
Domain.Client client, DbContext db) => {
var affected = await db.Client
.Where(model => model.ID == id)
.ExecuteUpdateAsync(setters => setters
.SetProperty(m => m.FirstName, client.FirstName)
// more fields but not School or Channel
);
return affected == 1 ? TypedResults.Ok() : TypedResults.NotFound();
}
Этот код не содержит ничего о школе или канале , и для них нет свойства. < Br /> Я сосредоточен на put < /code>, потому что я пытаюсь обновить существующую запись. Новый объект и добавьте его снова в объект client .

Код: Выделить всё

group.MapPut("/{id}", async Task (long id,
Domain.Client client, DbContext db) => {
if(client.Channels != null)
{
var listChannels = client.Channels.ToList();
client.Channels = new List();
foreach(Channel c in listChannels)
{
var cn = db.Channels.Where(t => t.ID == c.ID).FirstOrDefault();
if (cn != null)
client.Channels.Add(cn);
}
}

if (client.School != null)
{
var school = db.Schools
.Where(s => s.ID == client.School.ID).FirstOrDefault();
if (school != null)
client.School = school;
else
client.School = null;
}

var affected = await db.Client
.Where(model => model.ID == id)
.ExecuteUpdateAsync(setters => setters
.SetProperty(m => m.FirstName, client.FirstName)
);
return affected == 1 ? TypedResults.Ok() : TypedResults.NotFound();
}
В этом случае в записи клиента schoolid остается пустой. В таблице соединений _Channel добавляется только одна запись, и она связана с первым объектом, но другие игнорируются.
Что я делаю неправильно?

Подробнее здесь: https://stackoverflow.com/questions/794 ... ework-core
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Минимальный API с Entity Framework Core — низкая производительность из-за изображений в базе данных
    Anonymous » » в форуме C#
    0 Ответы
    17 Просмотры
    Последнее сообщение Anonymous
  • Entity Framework Core Сложный тип в качестве первичного ключа
    Anonymous » » в форуме C#
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Entity Framework Core 8. Ошибка случайной ссылки на объект FindAsync @ System.Data.Entity.Core.Common.Internal.Materiali
    Anonymous » » в форуме C#
    0 Ответы
    46 Просмотры
    Последнее сообщение Anonymous
  • Подключите и запросите базу данных SQL Azure с использованием ядра .NET и Entity Framework Core
    Anonymous » » в форуме C#
    0 Ответы
    42 Просмотры
    Последнее сообщение Anonymous
  • Подключите и запросите базу данных SQL Azure с использованием ядра .NET и Entity Framework Core
    Anonymous » » в форуме C#
    0 Ответы
    9 Просмотры
    Последнее сообщение Anonymous

Вернуться в «C#»