C#Linq实体框架-通过修改Excel单元格值更新数据库

C#Linq实体框架-通过修改Excel单元格值更新数据库,c#,sql-server,excel,entity-framework,vsto,C#,Sql Server,Excel,Entity Framework,Vsto,我正在尝试编写一个程序,用户可以从数据库中检索数据,对其进行更改和更新。 我使用实体框架从数据库(SQL Server)获取数据的代码如下: using (context = new ClientModel()) { var query = from c in context.ClientInfo select c; int i = 1; fo

我正在尝试编写一个程序,用户可以从数据库中检索数据,对其进行更改和更新。 我使用实体框架从数据库(SQL Server)获取数据的代码如下:

using (context = new ClientModel())
        {
            var query =
                from c in context.ClientInfo
                select c;

            int i = 1;
            foreach (var c in query)
            {
                ws.Cells[i, 1].Value = c.Name;
                ws.Cells[i, 2].Value = c.LastName;
                ws.Cells[i, 4].Value = c.City;
                ws.Cells[i, 5].Value = c.Country;

                i++;
            }
        }
输出是这样的:

但是,当我试图根据单元格值的变化更新数据库时,遇到了麻烦。如果用户决定将例如“country2”更改为“country999”,我如何更新数据库

我找到的解决方案是更新用户从数据库检索到的整个表。代码如下:

private void btnUpdate_Click(object sender, EventArgs e)
    {
        using (context = new ClientModel())
        {
            int i = 1;
            do
            {
                var tableClient = context.Client.Find(i);

                ws.Cells[i, 1].Value = tableClient.Name;
                ws.Cells[i, 2].Value = tableClient.LastName;
                ws.Cells[i, 3].Value = tableClient.City
                ws.Cells[i, 4].Value = tableClient.Coutry

                context.SaveChanges();
                i++;
            } while (ws.Cells[i, 1].Value == null);
        }
    }

但是,上面的代码没有更新数据库。

您应该切换
ws.Cells
tableClient
。您要做的是再次填充Excel,而不是以其他方式:

tableClient.Name = ws.Cells[i, 1].Value;
tableClient.LastName = ws.Cells[i, 2].Value;
tableClient.City = ws.Cells[i, 3].Value;
tableClient.Coutry = ws.Cells[i, 4].Value;

您还应该更改
while
条件,以查找
ws.Cells[i,1].Value=null

您应该切换
ws.Cells
tableClient
。您要做的是再次填充Excel,而不是以其他方式:

tableClient.Name = ws.Cells[i, 1].Value;
tableClient.LastName = ws.Cells[i, 2].Value;
tableClient.City = ws.Cells[i, 3].Value;
tableClient.Coutry = ws.Cells[i, 4].Value;

您还应该更改
while
条件,以查找
ws.Cells[i,1].Value=空

除了Caldazar的答案之外,您可能还需要告诉EF您为它所做的更改,以便使用
context.Entry(tableClient).State=EntityState.Modified就在
SaveChanges()之前。
不,我没有。但是,在根据Caldazar所说的更改代码后,它现在开始运行。除了Caldazar的回答之外,您可能需要告诉EF您为它所做的更改,以便使用
context.Entry(tableClient).State=EntityState.Modified就在
SaveChanges()之前。
不,我没有。然而,根据卡尔达扎的话修改代码后,它现在成功了。此外,我还必须修改“var tableClient=context.Client.Find(I);”,我假设usar将始终使用主键获取数据:1,2,3,4。。。。现在它正在运行代码。很高兴听到这个消息。如果您在答案中打上标记,我们将不胜感激:)它奏效了。此外,我还必须修改“var tableClient=context.Client.Find(I);”,我假设usar将始终使用主键获取数据:1,2,3,4。。。。现在它正在运行代码。很高兴听到这个消息。如果您将标记为答案,将不胜感激:)