[英]Updating a record using LINQ Context?
我试图用单个值更新来更新用户表,但我无法弄清楚我做错了什么。 这就是我所拥有的:
public static void ApplyROB(string ROBread, string userName)
{
using (SERTEntities ctx = CommonSERT.GetSERTContext())
{
// +=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=
// Audit of the transfer
datUser trUser = new datUserRole();
trUser.ROB = ROBread;
trUser.AccountName = userName;
// Persist update to DB
ctx.SaveChanges();
}
}
我离开了吗? 当我点击更新时没有任何反应。 怎么说,用户名=用户名? 我做得对吗?
基本上需要一个简单的:
update datUser set ROB = "Y" where AccountName= "myusername"
在使用Context的LINQ中,它变得更复杂一些
请帮忙。
您没有将新实体添加到上下文中,因此在保存时,上下文不会发现任何更改。 你需要......
ctx.datUserRoles.Add(datUserRole)
要进行更新,您需要从上下文中检索实体,对其进行更改,然后保存...所以:
var entity=ctx.datUserRoles.SingleOrDefault(dur=>dur.AccountName==someUserName);
if(entity!=null)
{
entity.someProp=someVal;
ctx.SaveChanges();
}
else
{
throw new UnexpectedOperationException(); //or however you want to fail
}
如果您需要更新。 也许是这样的:
public static void ApplyROB(string ROBread, string userName)
{
using (SERTEntities ctx = CommonSERT.GetSERTContext())
{
var trUser= ctx.datUserRole.Where(a=>a.AccountName==userName)
.FirstOrDefault();
if(trUser!=null)
{
trUser.ROB = ROBread;
ctx.SaveChanges();
}
}
}
如果您确定要始终有更新的内容,可以使用First()
。 然后您不需要检查trUser
是否为null
在某种意义上,消费者是正确的,在另一种意义上是错误的:您想要更新现有记录。
为此,您需要先选择记录,例如:
var user =
(from u in ctx.datUserRoles
where u.AccountName == "accountname"
select u).FirstOrDefault();
如果accountname
是相同类型的有效内容 - 无关紧要,因为您可以根据需要选择它,您可以触摸它以符合您的标准。 然后,一旦你有项目做的东西:
if (user != null) {
user.ROB = ROBread;
ctx.SaveChanges();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.