范围更改时,ApplyCurrentValues方法问题

时间:2012-05-15 10:25:42

标签: c# sql-server entity-framework windows-applications

我正在使用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()但无用的

2 个答案:

答案 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)

一切都很好用!