Это лучший способ добавить многие ко многим, когда вам требуется идентификатор, которого у вас еще нет? - PullRequest
1 голос
/ 16 марта 2020
using System;

using System.Collections.Generic; использование System.ComponentModel.DataAnnotations;

пространство имен EventsCoreApi.Models.Entities {publi c частичный класс Event {publi c Event () {

        EventHasMusicGenre = new HashSet<EventHasMusicGenre>();
    }

    public uint EventId { get; set; }
    public string Name { get; set; }
    public DateTime StartDate { get; set; }
    public DateTime EndDate { get; set; }
    [Timestamp]
    public byte[] StartTime { get; set; }
    [Timestamp]
    public byte[] EndTime { get; set; }
    public string Description { get; set; }
    public string PolicyMinimumAge { get; set; }
    public string PolicyDescription { get; set; }
    public uint DressCodeId { get; set; }

    public virtual DressCode DressCode { get; set; }

    public virtual ICollection<EventHasMusicGenre> EventHasMusicGenre { get; set; }'    




 [HttpPost]
    public async Task<ActionResult<Event>> PostEvent(EventDto eventFromClient)
    {
        var newEvent = new Event
        {
            Name = eventFromClient.Name,
            StartDate = eventFromClient.StartDate,
            EndDate = eventFromClient.EndDate,
            StartTime = eventFromClient.StartTime,
            EndTime = eventFromClient.StartTime,
            Description = eventFromClient.Description,
            DressCodeId = eventFromClient.DressCodeId,
            PolicyMinimumAge = eventFromClient.PolicyMinimumAge,
            PolicyDescription = eventFromClient.PolicyDescription
        };


        _context.Event.Add(newEvent);

        await _context.SaveChangesAsync();


            EventHasMusicGenre music1 = new EventHasMusicGenre()
            {
                EventId = newEvent.EventId,
                MusicGenreId = eventFromClient.MusicGenres[0].MusicGenreId
            };

        EventHasMusicGenre music2 = new EventHasMusicGenre()
        {
            EventId = newEvent.EventId,
            MusicGenreId = eventFromClient.MusicGenres[1].MusicGenreId
        };


        await _eventHasMusicGenresRepository.PostEventHasMusicGenre(music1);

        await _eventHasMusicGenresRepository.PostEventHasMusicGenre(music2);

        await _context.SaveChangesAsync();

У меня есть создать объект события, который имеет отношение «многие ко многим», поэтому таблица привязки будет EventHasMusicGenre, у которой есть собственное хранилище и методы, это лучший способ сделать это?

1 Ответ

0 голосов
/ 16 марта 2020

этот шаблон в порядке, однако см. Ниже альтернативный вариант:

List<EventHasMusicGenre> genres = new List<EventHasMusicGenre>();//declare list

foreach(var g in eventFromClient.MusicGenres)//loop client array
{
  genres.Add(new EventHasMusicGenre(){//add to list
    MusicGenreId = g.MusicGenreId
  })
}

var newEvent = new Event
    {
        Name = eventFromClient.Name,
        StartDate = eventFromClient.StartDate,
        EndDate = eventFromClient.EndDate,
        StartTime = eventFromClient.StartTime,
        EndTime = eventFromClient.StartTime,
        Description = eventFromClient.Description,
        DressCodeId = eventFromClient.DressCodeId,
        PolicyMinimumAge = eventFromClient.PolicyMinimumAge,
        PolicyDescription = eventFromClient.PolicyDescription,
        MusicGenres : [ genres ] //list as part of model, no need to worry about the id
    };

Таким образом, вам не нужно жестко кодировать индексы

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