2015-06-22 35 views
1

我需要帮助更新我的实体框架模型。我想在实体中查找某个字段并使用文本框的值更新其值。带有textbox.text的实体框架更新值

我尝试这样做:

var context1= new Entities1(); 
using (context1) 
{ 
    var chechUser = (from c in context1.Users 
        where c.Username == LabelUsername.Text 
        select c.Name).Single(); 

    chechUser = TextBoxNewName.Text; 

    context1.SaveChangesAsync(); 
} 

没有生成错误,但它不工作(实体不会更新)。

有人能告诉我我做错了什么吗? 提前致谢。

+2

我的猜测是,您必须等到SaveChangesAsync()才能超出范围。或者使用SaveChanges()。 – Jeroen

+1

因为你异步地调用保存更改,所以'await context1.SaveChangesAsync();' – Oluwafemi

回答

2

我的猜测是EF不知道如何保存此更新。

你的“var”只是返回一个字符串,而不是数据库记录,所以当你改变它的值时,它不再链接到db记录。

这里是你的代码应该是什么样子:

var context1= new Entities1(); 
using (context1) 
{ 
    var chechUser = (from c in context1.Users 
        where c.Username == LabelUsername.Text 
        select c).FirstOrDefault(); 

    if (chechUser == null) 
     throw new Exception("Couldn't find a Users record with a Username value of: " + LabelUsername.Text); 

    chechUser.Name = TextBoxNewName.Text; 

    context1.SaveChangesAsync(); 
} 

希望这有助于。

0

它不起作用。您不能只选择一个字段,将其更新并发送回数据库进行保存。您必须选择一条记录,更改其属性,然后将更改保存回数据库。

var context1 = new Entities1(); 
using (context1) 
{ 
    var chechUser = (from c in context1.Users 
     where c.Username.ToLower() == LabelUsername.Text.Trim().ToLower() 
     select c).Single(); 

    chechUser.Name = TextBoxNewName.Text; 

    await context1.SaveChangesAsync(); 
} 

正如其他人所说,你必须await一个async操作完成。

2

您正在更改实体字段而不是实体,因此保存更改无效。

var chechUser = (from c in context1.Users 
        where c.Username == LabelUsername.Text).Single(); 

现在你有chechUser

chechUser.Name = TextBoxNewName.Text; 
await context1.SaveChangesAsync(); 

用户实体,如果您使用的是Async版本的SaveChanges你应该await它,或致电context1.SaveChanges();代替。

+1

(该死的,你用1分钟打我的答案!!) –