将对象添加到字段列表实体框架

时间:2019-12-28 01:09:27

标签: entity-framework asp.net-core asp.net-web-api entity-framework-core

对不起,如果我不遵守约定,我是新来的。

在学习ASP.NET Core和Entity Framework时遇到问题。

我有很多下注,并且有多个下注的用户。赌注不能有用户(它们仅显示在网站上,用户将其添加到他们的帐户中)。

这是我的两个模特:

投注:

public class Bets
{
    public int Id { get; set; }
    public string name { get; set; }
    public string description { get; set; }
    public double team1 { get; set; }
    public double team2 { get; set; }
    public string sport { get; set; }
    public bool enabled { get; set; } // 1 = yes 2 = no
    public virtual User user {get;set;}
    public int? UserId {get;set;}
}

用户:

public class User    
{
    public int UserId { get; set; }
    public string Username { get; set; }
    public byte[] PasswordHash { get; set; }
    public byte[] PasswordSalt { get; set; }
    public double moneyBalance { get; set; }
    public int admin { get; set; }
    public virtual ICollection<Bets> bets {get; set;}
}

然后我尝试向用户添加一个已经存在的赌注:

 public async Task<bool> addUserBet(int id, Bets bet)
 {
     var user = await _context.Users.FirstOrDefaultAsync(u => u.UserId == id);

     if (!(user.bets == bet)) 
     {
         user.bets.Add(bet);
         await _context.SaveChangesAsync();
         return true;
     }

     return false;
}

控制器:

[AllowAnonymous]
[HttpPut("addBetUser/{id}")]
public async Task<IActionResult> AddBetUser(int id, BetForAddToUserDto betForAddTo)
{
    Bets bets = new Bets();

    _mapper.Map(betForAddTo, bets);

    await _repo.addUserBet(id, bets);
    await _repo.SaveAll();
    return StatusCode(200);
}

但是当我尝试上述端点时,我在Postman中收到此错误:

enter image description here

我不知道我在做什么错?请帮助我,谢谢:)

2 个答案:

答案 0 :(得分:0)

  

我试图向用户添加一个已经存在的赌注

如果您已经有一个下注和一个用户,并且想要将此下注添加到该用户。

这是一个工作示例,如下所示:

1。型号:

public async Task<bool> addUserBet(int id, Bets bet)
{
    var user = await _context.User.FirstOrDefaultAsync(u => u.UserId == id);
    if (!(user.bets == bet))
    {
        bet.UserId = id;
        _context.Bets.Update(bet);
        await _context.SaveChangesAsync();
        return true;
    }
    return false;
}
[AllowAnonymous]
[HttpPut("addBetUser/{id}")]
public async Task<IActionResult> PutUser(int id, BetForAddToUserDto betForAddTo)
{
    Bets bets = new Bets();           
    _mapper.Map(betForAddTo, bets);
    var bet = _context.Bets.Find(bets.Id);
    await addUserBet(id, bet);
    return StatusCode(200);
}

2.Controller:

public class AutoMapping: Profile
{
    public AutoMapping()
    {
        CreateMap<Bets, BetForAddToUserDto>().ReverseMap();
    }
}

3。个人资料:

public void ConfigureServices(IServiceCollection services)
{
    services.AddAutoMapper(typeof(AutoMapping));
}

4.Startup.cs:

{{1}}

答案 1 :(得分:0)

此:

if (!(user.bets == bet)) 

User.bets是一个集合,您无法将其与单个投注进行比较

正确的检查方法是:

if (!(user.bets.Any(b => b.ID == bet.ID))) 

此外,您不会为此参数传递任何内容:

BetForAddToUserDto betForAddTo