首页 > 解决方案 > 如何使用相同的外键检查多行并逐步更新它们

问题描述

我试图解释我的问题。

我的数据库中有一个表,其中多行具有相同的 FK(Foreinkey),每行都有列IDGuestUserNameGuestUserImageGuestFrameMaleFemale和。除和之外的所有列都有标准值。默认设置为(参见我的)。那是我聚会的默认客人。现在,如果我尝试以用户身份加入该聚会,我想检查一行中的值是否仍然存在,以及它是否使用来自用户的值更新。FK_PartyFK_UserIdFK_PartyFK_UsernullParty_Guest_TBLFK_UsernullUserId

我的派对_来宾_TBL

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 更新。

标签: c#asp.netentity-framework-core

解决方案


我自己爱上了它。

 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 感谢您帮助我编写代码。


推荐阅读