ASP .NET代码中的连接表第一种方法

时间:2017-02-28 21:02:33

标签: asp.net asp.net-mvc entity-framework asp.net-identity junction-table

我正在创建Identity User和Game表之间的联结表。该表名为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 });
    }

2 个答案:

答案 0 :(得分:1)

Example of configuring many-to-many relationship in entity framework

Examle of inserting related objects

一些提示: 我不会在联结实体中声明主键,因为联结通常由复合键定义。 请记住,dbcontext.SaveChanges()将查找子实体并保存它们。

答案 1 :(得分:1)

ApplicationUserIdGameId都必须具有[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; }
}

然后您可以选择添加新记录,从GameApplicationUser或直接使用UserGame课程浏览导航属性。