ASP .NET 代码优先方法中的连接表

Posted

技术标签:

【中文标题】ASP .NET 代码优先方法中的连接表【英文标题】:Junction Table in ASP .NET code first approach 【发布时间】:2017-02-28 21:02:32 【问题描述】:

我正在创建身份用户和游戏表之间的联结表。此表称为 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 );
    

【问题讨论】:

【参考方案1】:

ApplicationUserIdGameId 都必须具有 [Key, Column(Order = 0)] 属性。只需将第一个设置为 Order 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 类。

【讨论】:

感谢您的帮助!添加新记录时仍然有些失落。我选择直接使用我的 UserGame 课程。我在控制器中创建了一个新的 UserGame 对象。我可以分配游戏 ID 和分数。我想知道这种方法是否正确:检索通过 User.Identity.GetUserID() 登录的当前用户并将其设置为 ApplicationuserID 字段。 是的,这是一种方法,添加新的 UserGame 实体,将其添加到您的上下文中。你应该在你的 DbContext 中将它作为 DbSet 吗? 它现在正在工作,在任何地方都找不到这种方法。非常感谢【参考方案2】:

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

Examle of inserting related objects

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

【讨论】:

感谢您的回答,我对该示例的问题是存储附加字段“分数”。这应该在 Game 类中吗?

以上是关于ASP .NET 代码优先方法中的连接表的主要内容,如果未能解决你的问题,请参考以下文章

asp.net中如何输出数据?

asp.net mvc 代码优先方法中的日期验证

asp.net如何输出数据?

ASP.NET Core 和 Entity Framework Core:Linq 中的左(外)连接

ASP.NET + SQL SERVER + JSON = 如何在 SQL Server 的两个连接表中获取数据并加载为 JSON?

无法在 .NET 中的实体框架代码优先方法中迁移 AspNetUser 实体