c# - 与 ASP.NET 标识表和自定义表的多对多关系

标签 c# asp.net entity-framework

我在 AplicationUser 表(从 ASP.NET Identity)到自定义表(Teams)之间建立了多对多关系。我需要插入一个用户并将其链接到数据库中已存在的团队,它还必须在 ApplicationUserTeams 表中插入一条记录。我正在做这样的事情,但它在团队表中创建了一条新记录。我无权访问 UserManager 上下文以附加团队。我会很感激任何想法?

public async Task<IHttpActionResult> RegisterUser(RegisterRecordBindingModel model)
    {
        if (!ModelState.IsValid)
        {
            return BadRequest(ModelState);
        }
        var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };

        var Team = new Team();
        Team.TeamId = model.teamId;
        user.Teams.Add(team);

        IdentityResult result = await UserManager.CreateAsync(user, model.Password);

        if (!result.Succeeded)
        {
            return GetErrorResult(result);
        }

        return Ok();
    }

这是模型: enter image description here

最佳答案

当一个实体被添加到一个上下文中时,所有附着的实体在它们还没有附加到上下文时也被标记为已添加。这是一个让开发人员感到困惑的 EF 功能。

一旦你知道了,如果你可以访问上下文,就很清楚该怎么做:

var team = new Team();

team.TeamId = model.teamId;
user.Teams.Add(team);
context.Teams.Attach(team);
...

但我不知道你是如何实例化你的 UserManager 的。您可能无法在 Controller 代码中访问其上下文。如果是这样,最好将联结表合并到类模型中,这将使裸类模型看起来像这样:

class ApplicationUserTeam
{
    [Key, Column(Order = 1)]
    public int ApplicationUserID { get; set; }
    [Key, Column(Order = 2)]
    public int TeamID { get; set; }
    public ApplicationUser ApplicationUser { get; set; }
    public Team Team { get; set; }
}

class ApplicationUser
{
    public ApplicationUser()
    {
        ApplicationUserTeams = new HashSet<ApplicationUserTeam>();
    }
    public int ID { get; set; }
    public ICollection<ApplicationUserTeam> ApplicationUserTeams { get; set; }
}

class Team
{
    public Team()
    {
        ApplicationUserTeams = new HashSet<ApplicationUserTeam>();
    }
    public int ID { get; set; }
    public ICollection<ApplicationUserTeam> ApplicationUserTeams { get; set; }
}

现在您可以简单地将一个 ApplicationUserTeam 对象添加到 ApplicationUser.ApplicationUserTeams

关于c# - 与 ASP.NET 标识表和自定义表的多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37628235/

相关文章:

c# - 杀死单一服务

ASP.net Canvas 服务器控件

c# - Entity Framework : Skip/Take functionality

c# - 如何把这个 Func 变成一个表达式?

c# - PropertyDescriptor.IsBrowsable 是否与关联的 Browsable() 属性不一致?

c# - 如何在 JsonConverter 中注入(inject)/访问 HttpContext?

c# - 我如何以及在何处使用 C# 中的 i++ 运算符?

c# - 为什么我不能在三元 if 语句中将可为 null 的 int 设置为 null?

javascript - 获取上个月日期javascript

mysql - 无法使用 MySql 运行代码优先迁移 - RenameColumn