gpt4 book ai didi

C# LINQ 查询创建意外的新行

转载 作者:太空宇宙 更新时间:2023-11-03 21:24:52 26 4
gpt4 key购买 nike

我有以下功能,它根据给定的 mac 地址是否存在在模型 MACReg 中创建新行或更新现有行。

public Boolean RegisterMAC(string pwd, string mac, string location)
{
School school = getSchoolByCode(pwd);
if (school == null)
{
return false;
}
//initial register or update
using (CloudPrintDbContext db = new CloudPrintDbContext())
{
MACReg r = db.MACRegs.Find(mac);
if (r == null) //create new row
{
MACReg m = new MACReg { MAC = mac, Location = location,
School = school, RegTime = DateTime.Now, UpdateTime = DateTime.Now };
db.MACRegs.Add(m);
}
else //update location
{
r.School = school;
r.Location = location;
r.UpdateTime = DateTime.Now;
}
db.SaveChanges();
}
return true;
}

但是,问题在于它总是在模型 School(而不是 MACReg)中创建一个新行。知道为什么吗?谢谢!

MACReg 和 School 的模型如下:

public class MACReg
{
[Key]
public string MAC { set; get; }

[Required]
public School School { set; get; }

[Required]
public string Location { set; get; }

[Required]
public DateTime UpdateTime { set; get; }

[Required]
public DateTime RegTime { set; get; }
}

public class School
{
[Key]
public int SchoolID { set; get; }

[Required]
public string SchoolName { set; get; }

[Required]
public DateTime CreateTime { set; get; }

[Required]
public DateTime PwdExprTime { set; get; }

[Required]
public byte[] PwdHash { set; get; }

[Required]
public byte[] Salt { set; get; }
}

更新:getSchoolByCode 在下方

private School getSchoolByCode(string pwd)
{
using (CloudPrintDbContext db = new CloudPrintDbContext())
{
foreach(School s in db.Schools.Where(s => s.PwdExprTime > DateTime.Now)){
byte[] userH = HashUtils.GenerateHash_Salt(pwd, s.Salt);
if (HashUtils.CompareByteArrays(userH, s.PwdHash))
{
return s;
}
}
}
return null;
}

最佳答案

您的 school 来自不同的 CloudPrintDbContext,因此它不会被 using 语句中的 db 实例跟踪.如果它没有附加到任何其他 DbContext,那么您可以在设置 School 之前将它附加到那个,然后它应该可以工作。

db.Schools.Attach(school);

顺便说一句,我建议您使用DbSet.Create() 方法而不是new,这样您就可以根据EF documentation 使用动态代理。 .

关于C# LINQ 查询创建意外的新行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27794874/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com