EF将子实体添加到父实体

时间:2020-10-02 18:43:54

标签: c# entity-framework asp.net-core

我正在尝试将子实体添加到父实体。孩子是User,而父母是CheckoutToken

插入CheckoutToken:

 public async Task Insert(CheckoutToken model)
 {
    var checkoutToken = new Data.Models.CheckoutToken {
        Token = model.Token,
        License = _dbContext.Licenses.Single(l => l.Id == model.License.Id),
        Created = model.Created,
        Expires = model.Expires
    };

     checkoutToken.UserId = model.User.AspNetUserId;
     checkoutToken.User = await _userManager.FindByIdAsync(model.User.AspNetUserId);
     await _dbContext.CheckoutTokens.AddAsync(checkoutToken);
     await _dbContext.SaveChangesAsync();
 }

由于某种原因,我得到了这个异常:

违反主键约束'PK_AspNetUsers'。无法在对象'dbo.AspNetUsers'中插入重复的密钥。重复的键值为(73a0c19b-a7b1-4462-8e82-12be55e47002)。 该声明已终止。

我不明白为什么要尝试创建用户?

1 个答案:

答案 0 :(得分:1)

尝试评论此行:

public async Task Insert(CheckoutToken model)
 {
    var checkoutToken = new Data.Models.CheckoutToken {
        Token = model.Token,
        License = _dbContext.Licenses.Single(l => l.Id == model.License.Id),
        Created = model.Created,
        Expires = model.Expires
    };

     checkoutToken.UserId = model.User.AspNetUserId;
     // checkoutToken.User = await _userManager.FindByIdAsync(model.User.AspNetUserId);
     await _dbContext.CheckoutTokens.AddAsync(checkoutToken);
     await _dbContext.SaveChangesAsync();
 }

这是因为您尝试使用与现有数据相同的数据来创建新用户,如果需要将现有用户分配给新实体,则仅分配用户ID而不是完整对象