使用实体框架向数据库提交更改

Dan*_*Dan 5 c# entity-framework asp.net-mvc-3

我遇到按日期从表中提取数据的情况。如果没有提供给定日期的数据,我将使用默认值创建一条记录并将其全部显示给用户。当用户处理完数据后,我需要提交更改。

所以我的问题是我如何在实体框架中提交表以处理可能同时存在更新和添加的表。这是使用MVC3和Entity Framework的C#语言。

因此,这就是开始数据的样子,

表A

NAME  AGE PHONE_NUM 
Jim   25  555-555-5555 
Jill  48  555-551-5555
Run Code Online (Sandbox Code Playgroud)

在用户处理完数据后,看起来可能像这样,

表A

NAME  AGE PHONE_NUM
Jim   25  555-555-5555
Jill  28  555-551-5555
Rob   42  555-534-6677
Run Code Online (Sandbox Code Playgroud)

如何提交这些更改?我的问题是既需要更新又需要插入吗?

我已经找到了一些类似的代码,但我不知道这种情况是否行得通。

用于添加数据行

entities.TABlEA.AddObject(TableOBJECT);
entities.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

或用于更新数据

entities.TABLEA.Attach(entities.TABLEA.Single(t => t.NAME == TableOBJECT.NAME));
entities.TABLEA.ApplyCurrentValues(TableOBJECT);
entities.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

这项工作中的任何一项还是我需要跟踪那里的内容和添加的内容?

有想法吗?

Sla*_*uma 4

或多或少你已经有了解决方案。您只需要检查尝试Single从数据库加载对象的调用是否有结果(SingleOrDefault改为使用)。如果结果是null则需要插入,否则更新:

foreach (var TableOBJECT in collectionOfYourTableOBJECTsTheUserWorkedWith)
{
    var objectInDB = entities.TABLEA
        .SingleOrDefault(t => t.NAME == TableOBJECT.NAME);
    if (objectInDB != null) // UPDATE
        entities.TABLEA.ApplyCurrentValues(TableOBJECT);
    else // INSERT
        entities.TABLEA.AddObject(TableOBJECT);
}
entities.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

(我假设这NAME是您实体的主键属性TableOBJECT。)