Таблица соединений в коде ASP .NET, первый подход

Я создаю соединительную таблицу между Identity User и игровой таблицей. Эта таблица называется UserGame и имеет два внешних ключа (UserID, GameID) и одно дополнительное поле для хранения счета.

public class UserGame
{
    [Key]
    public string ApplicationUserID { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }

    public int GameID { get; set; }
    public virtual Game Game { get; set; }

    public int Score { get; set; }
}

Меня смущает создание новой записи UserGame. Как мне это сделать и правильный ли мой подход?

Обновление (это сработало):

 [HttpPost]
    public ActionResult SubmitScore(int gameID, int score)
    {
        var playerRecord = new UserGame();

        playerRecord.ApplicationUserID = User.Identity.GetUserId();
        playerRecord.GameID = gameID;
        playerRecord.Score = score;

        return Json(new { success = true });
    }

person Gareth Quirke    schedule 28.02.2017    source источник


Ответы (2)


И ApplicationUserId, и GameId должны иметь атрибут [Key, Column(Order = 0)]. Просто установите для первого порядка 0, а для другого — 1.

public class UserGame
{
    [Key, Column(Order = 0)]
    public string ApplicationUserID { get; set; }
    public virtual ApplicationUser ApplicationUser { get; set; }

    [Key, Colum(Order = 1)]
    public int GameID { get; set; }
    public virtual Game Game { get; set; }

    public int Score { get; set; }
}

Затем у вас есть выбор: добавить новую запись, пройти через свойство навигации из Game или ApplicationUser или напрямую с вашим классом UserGame.

person dbraillon    schedule 28.02.2017
comment
Спасибо за помощь! Еще немного потерялся при добавлении новой записи. Я решил перейти непосредственно к моему классу UserGame. Я создал новый объект UserGame в своем контроллере. Я могу назначить gameID и счет. Мне интересно, верен ли этот подход: извлеките текущего пользователя, вошедшего в систему через User.Identity.GetUserID(), и установите его как поле ApplicationuserID. - person Gareth Quirke; 01.03.2017
comment
Да, это способ добавить новую сущность UserGame, добавить ее в свой контекст. Вы должны иметь его как DbSet в своем DbContext, верно? - person dbraillon; 01.03.2017
comment
Это работает сейчас, нигде не мог найти этот подход. большое спасибо - person Gareth Quirke; 01.03.2017

Пример настройки many-to -множество отношений в структуре сущностей

Пример вставки связанных объектов

Пара советов: я бы не стал объявлять первичный ключ в объекте соединения, поскольку соединения обычно определяются составными ключами. Имейте в виду, что dbcontext.SaveChanges() будет искать дочерние объекты и также сохранять их.

person NathanS    schedule 28.02.2017
comment
Спасибо за ваш ответ, моя проблема с этим примером заключается в хранении дополнительного поля «Оценка». Должно ли это быть в классе Game? - person Gareth Quirke; 01.03.2017