Как установить в Entity Framework Core объединяющую таблицу и сохранить ее через API?C#

Место общения программистов C#
Ответить
Anonymous
 Как установить в Entity Framework Core объединяющую таблицу и сохранить ее через API?

Сообщение Anonymous »

В моем проекте я использую подход «сначала база данных». У меня есть класс для сеансов, который требует наличия одного или нескольких значений из другой таблицы Explanation.

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

public class Session : Table
{
public IList? SessionExplanations { get; set; }
}

public class Explanation : Table
{
public IList? SessionExplanations { get; set; }
}

[PrimaryKey(nameof(SessionId), nameof(ExplanationId))]
public class SessionExplanations
{
public long SessionId { get; set; }

[ForeignKey("SessionId")]
public Session? Session { get; set; }

public long ExplanationId {  get; set; }

[ForeignKey("ExplanationId")]
public Explanation? Explanation { get; set; }
}
На странице я заполняю форму и выбираю одно или несколько объяснений, чтобы связать их с этим сеансом. У меня есть минимальный API для сохранения сеанса в базе данных.
Если запись новая, у меня нет идентификатора. Итак, я не знаю, как сформировать JSON в качестве полезной нагрузки, чтобы сохранить сеанс и все детали в объединяющей таблице.
В API мне нужно разделить сохранение в двух частях: сначала сохраните сеанс, а когда у меня будет идентификатор, сохраните данные в объединяющей таблице?
ОбновитьКроме того, когда я прочитал Запись Сеанс, я предпочитаю включать Пояснение, а затем возвращать из API полный json. Если я напишу этот минимальный API

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

 group.MapGet("/{id}", async Task (
long id, DbContext db) =>
{
return await db.Sessions
.ThenInclude(d => d.SessionBrainExplanations)
.Where(s => s.ID == id)
.FirstOrDefaultAsync(model => model.ID == id)
is Session model
? TypedResults.Ok(model)
: TypedResults.NotFound();
})
.WithName("GetSessionById")
.WithOpenApi();
Я получаю эту ошибку

System.Text.Json.JsonException: обнаружен возможный цикл объекта. Это может быть связано либо с циклом, либо с тем, что глубина объекта превышает максимально допустимую глубину 64. Рассмотрите возможность использования ReferenceHandler.Preserve в JsonSerializerOptions для поддержки циклов.

Есть ли способ избежать этого?

Подробнее здесь: https://stackoverflow.com/questions/792 ... ve-via-api
Ответить

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

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

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

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

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