c# - 如何使用相同的外键检查多行并逐步更新它们
问题描述
我试图解释我的问题。
我的数据库中有一个表,其中多行具有相同的 FK(Foreinkey),每行都有列ID
、GuestUserName
、GuestUserImage
、GuestFrame
、Male
、Female
和。除和之外的所有列都有标准值。默认设置为(参见我的)。那是我聚会的默认客人。现在,如果我尝试以用户身份加入该聚会,我想检查一行中的值是否仍然存在,以及它是否使用来自用户的值更新。FK_Party
FK_User
Id
FK_Party
FK_User
null
Party_Guest_TBL
FK_User
null
UserId
var guestNumber = await _db.Party_GuestNumber_TBL.FirstOrDefaultAsync(x => x.FK_Party == PartyId);
var partyGuest = await _db.Party_Guest_TBL.FirstOrDefaultAsync(x => x.FK_Party == PartyId);
var user = await _db.User_TBL.FirstOrDefaultAsync(x => x.Id == UserId);
var gender = await _db.Gender_TBL.FirstOrDefaultAsync(x => x.FK_User == UserId);
if (partyGuest.FK_Party == PartyId && partyGuest.FK_User == null && partyGuest.Male == gender.Male)
{
partyGuest.FK_User = user.Id;
partyGuest.GuestUserName = user.UserName;
partyGuest.GuestImageUrl = user.ImageUrl;
partyGuest.GuestFrame = user.Frame;
}
这很好用,但我的问题是这段代码只检查第一行而不检查其他行。这意味着一次只能更新一行。但我想逐步检查每一行,直到每个 FK_User 列都用 UserId 更新。
解决方案
我自己爱上了它。
var guestNumber = await _db.Party_GuestNumber_TBL.FirstOrDefaultAsync(x => x.FK_Party == PartyId);
var user = await _db.User_TBL.FirstOrDefaultAsync(x => x.Id == UserId);
var gender = await _db.Gender_TBL.FirstOrDefaultAsync(x => x.FK_User == UserId);
var partyGuest = _db.Party_Guest_TBL.Where(x => x.FK_Party == PartyId && x.FK_User == null);
var maleGuest = partyGuest.FirstOrDefault(x => x.FK_User == null && x.Male == gender.Male);
var femaleGuest = partyGuest.FirstOrDefault(x => x.FK_User == null && x.Female == gender.Female);
var alreadyJoined = _db.Party_Guest_TBL.Where(u => u.GuestUserName == user.UserName).SingleOrDefault();
if (alreadyJoined != null)
{
return BadRequest("This User already join the party");
}
else if (maleGuest.Male == gender.Male)
{
maleGuest.FK_User = user.Id;
maleGuest.GuestUserName = user.UserName;
maleGuest.GuestImageUrl = user.ImageUrl;
maleGuest.GuestFrame = user.Frame;
}
else if (femaleGuest.Female == gender.Female)
{
femaleGuest.FK_User = user.Id;
femaleGuest.GuestUserName = user.UserName;
femaleGuest.GuestImageUrl = user.ImageUrl;
femaleGuest.GuestFrame = user.Frame;
}
_db.SaveChanges();
@JHBonarius 感谢您帮助我编写代码。
推荐阅读
- javascript - Javascript 不跟踪 DOM 更改
- javascript - js concat函数和spread算子合并/插入有什么区别吗?
- c# - 调试和运行时不同的 InvalidOperationException 行为
- google-chrome-extension - 如何收听 Chrome 扩展中点击的网页的警报框
- angular - 从 Angular 8 中的 Observable 获取最后一个值
- javascript - Typeahead afterselect 填充到另一个输入文本
- docker - Openshift 重新部署失败的最新部署配置
- python - 高基数特征的方差分析
- json - react native 2 下拉列表取决于第一个
- python-3.x - 无法将 s3 与来自 aws lambda 的 ec2 文件夹同步