我正在使用EF编写一个C#.Net Windows应用程序与SQL Express进行通信。我的应用程序中有一个Contacts表。编辑联系人我通过ShowDialogue()方法调用了一个新的窗体,并使用了ApplyCurrentValue方法。在这种形式下,如果我得到我的联系人列表(使用db.Contacts.ToList()方法),可以看到更改但当我关闭表单并想要刷新主窗体中存在的gridview时,我看不到除非我重新启动整个应用程序,否则更改。
这是显示新表单的代码:
NewContactForm contact = new NewContactForm();
contact.TopLevel = true;
contact.ShowInTaskbar = false;
contact.ShowDialog();
RefreshForm();
FillGridView();
我更改了contactToEdit对象的属性,并希望保存更改。所以:
public void UpdateContact(Contact contactToEdit)
{
db.Contacts.ApplyCurrentValues(contactToEdit);
db.SaveChanges();
}
现在我想使用FillGridView()中的代码显示联系人列表:
db.Contacts.ToList();
我错过了一些代码吗?我甚至使用了db.AcceptAllChanges()但无用的
答案 0 :(得分:0)
以下是您可能想要尝试的一些代码。
db.Contacts.Single(Contact => Contact.ContactID == <lets say, 5>).Name = "Pete";
db.Contacts.Single(Contact => Contact.ContactID == <lets say, 5>).Surname = "Repeat";
db.SaveChanges();
这是我使用Entity Framework更新数据库中记录的方法。看看这是否有帮助。您可以使用toList()
方法或查询联系人模型
var contactquery = (from x in db.Contacts where x.ContactID == <lets say, 5> select new {contactName = x.Name});
List<string> contactNames = new List();
foreach (var name in contactquery)
{
contactNames.Add(name.contactName);
}
<强>更新强> 这只是一个澄清更新。在我说的地方,它可以是表示Single()方法中声明的字段的任何值。 single()的作用是仅从查询中的lambda表达式确定的查询中提取第一条记录。
更新2 修复了我的代码中的错误。请修改你的
答案 1 :(得分:0)
好的..这是适合我的解决方案
在我的主窗体(父作用域)中,我使用这个简单的代码刷新了修改过的对象:
db.Refresh(System.Data.Objects.RefreshMode.StoreWins, contactToEdit)
一切都很好用!