Базовое ядро ​​Entity Framework: Сохранение «один-ко-многим» без существующего внешнего объекта - PullRequest
0 голосов
/ 04 января 2019

Недавно переехав в C # /. Net Core с других языков, я застрял в проблеме с EF Core, которую не смог выяснить из документации и надеюсь, что вы сможете помочь. В некотором смысле это связано, но не идентично моему предыдущему вопросу .Net Core [FromBody] JArray to ICollection

Моя база данных содержит ряд встреч, которые отображаются по расписанию Syncfusion. Участники могут быть приглашены на эти встречи. Для этого в редакторе отображается список пользователей, а массив направляющих JSON передается с любым действием вставки или обновления.

Сам объект User недоступен в рамках приложения, поэтому я хотел бы сохранить только их Руководства для каждого назначения. Я предвидел эту структуру:

Назначения (Начало, Конец, ..., «Участники собрания») Участник будет просто состоять из AppointmentsId и Guid - Поскольку любой Guid может посещать каждую встречу только один раз, полезный составной ключ, состоящий из этих двух атрибутов.

Любая встреча может не иметь ни одного, ни одного, ни нескольких связанных гидов.

В коде у меня есть это (сокращенно):

public class Appointment
{
    public int Id { get; set; }
    public DateTime StartTime { get; set; }
    public ICollection<Attendee> AttendeeList { get; set; } 
    [NotMapped]
    public List<Guid> PostedAttendeeList { get; set; } // Contains a list of Guids after an Insert/Update POST action from [FromBody]
}

Участник будет просто состоять из идентификатора встречи и идентификатора пользователя.

public class Attendee
{
    public Guid Id { get; set; }         
    public int AppointmentId { get; set; }
}

Конфигурация участника:

public class AttendeeConfiguration : IEntityTypeConfiguration<Attendee>
{
    public void Configure(EntityTypeBuilder<Attendee> builder)
    {
        builder.HasKey(x => new { x.Id, x.AppointmentId });
    }
}

После получения POST из расписания, «PostedAttendeeList» может быть пустым или содержать одну или несколько направляющих. Если это существующее назначение, «AttendeeList» может быть пустым или содержать одну или несколько направляющих. Мне интересно несколько вещей: а) есть ли лучший способ сохранить данные такого рода? Я пытался понять типы Owned Entity, но не смог понять, поможет ли это мне здесь. б) если это действительно хороший способ справиться с этим, как я могу убедиться, что «AttendeeList» идентичен «PostedAttendeeList» после обработки, так что все новые записи добавляются, а те, которые не присутствуют в «PosttedAttendeeList», удаляются через EF ядро

Я особенно озадачен тем, кто несет ответственность за поддержание «AppointmentId» - я хотел, чтобы свойство было видимым, но я понимаю, что EF заполнит его при работе с базовым свойством? То есть. что внутри класса «Appointment» a «AttendeeList.Add (new Attendee () {Id =« 1234-abcd -... »}») автоматически заполняет AppointmentId при сохранении?

Если вы читаете до здесь и запутались, пожалуйста, уделите время, чтобы вспомнить, когда вы начали программировать - я полностью сбит с толку и не могу придумать лучшего вопроса. Даже если вы не можете помочь с ответом, возможно, вы могли бы помочь мне сделать вопрос лучше. Спасибо всем большое! Любой комментарий с предложениями приведет к обновлению моего вопроса, чтобы улучшить его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...