对不起,如果我不遵守约定,我是新来的。
在学习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中收到此错误:
我不知道我在做什么错?请帮助我,谢谢:)
答案 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