エンティティフレームワークとLINQを初めて使用しています。私は最初にレコードが存在するかどうかを確認する必要がある問題に悩まされています。それが存在する場合は、それに応じてRESUMEIDという列でレコードを更新する必要があります。そうでなければ、レコードを追加する必要があります。私は正常に追加することができますが、私はLINQでレコードを更新する方法がわかりません。ASP.NET MVC 5プロジェクトでLINQ LAMBDAを使用してレコードを更新する方法
以下は私の試みです:
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(ReferralViewModel viewModel)
{
var candidateId = User.Identity.GetUserId();
// I AM CONFUSED ABOUT BELOW STATEMENT
var IsDupeReferral = _context.Referrals
.Where(r => (r.CandidateId == candidateId)
&& (r.CompanyId == viewModel.CompanyId) && (r.SkillId == viewModel.SkillId))
.Select(r=>r.ReferralId).SingleOrDefault();
if(IsDupeReferral!=0)
{
//IF I FIND DUPE REFERRAL RECORD I WANT TO UPDATE SOME OF THE VALUES IN THAT
_context.Referrals.Where(r => r.ReferralId == IsDupeReferral).
AND UPDATE r.resumeId with viewModel.ResumeId // How to do this?
// NOT SURE ABOUT BELOW LINE EITHER
_context.SaveChanges();
}
else
{
// BELOW CODE IS WORKING FINE
var referral = new Referral
{
ReferralName = viewModel.ReferralName,
ResumeId = viewModel.ResumeId,
CandidateId = candidateId,
DegreeId = viewModel.DegreeId,
CoverLetterId = viewModel.CoverLetterId,
SkillId = viewModel.SkillId
};
if (!string.IsNullOrEmpty(viewModel.TempCompany))
{
var newCompany = new Company
{
CompanyName = viewModel.TempCompany
};
newCompany.Referrals.Add(referral);
_context.Companies.Add(newCompany); ;
}
else
{
referral.CompanyId = viewModel.CompanyId.Value;
_context.Referrals.Add(referral);
}
_context.SaveChanges();
}
return RedirectToAction("ReferralCenter");
}
先生、これは必要ですか? '_context.Entry(照会).State = System.Data.EntityState.Modified;' – Unbreakable
以下は、回答の用途です。 FirstOrDefault。あなたは私がどちらを使うべきかを親切に教えてくれますか? FirstOrDefaultまたはSingleOrDefault? – Unbreakable
EFは私が行を修正していることを知るのに十分スマートではありませんか?または、行の状態を明示的に設定する必要がありますか? – Unbreakable