繁体   English   中英

使用Entity Framework提交对数据库的更改

[英]Committing changes to the database using Entity Framework

我有一种情况,我按日期从表中提取数据。 如果没有为给定日期提供数据,我使用默认值创建记录并将其全部显示给用户。 当用户完成操作数据时,我需要提交更改。

所以我的问题是如何在实体框架中处理提交表格,其中可能存在需要完成的更新和添加。 这是在使用MVC3和实体框架的C#中。

所以这是数据可能开始的样子,

表A.

NAME  AGE PHONE_NUM 
Jim   25  555-555-5555 
Jill  48  555-551-5555

用户完成数据后,它可能看起来像这样,

表A.

NAME  AGE PHONE_NUM
Jim   25  555-555-5555
Jill  28  555-551-5555
Rob   42  555-534-6677

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

我发现了一些这样的代码,但我不知道它是否适用于这种情况。

用于添加数据行

entities.TABlEA.AddObject(TableOBJECT);
entities.SaveChanges();

或者用于更新数据

entities.TABLEA.Attach(entities.TABLEA.Single(t => t.NAME == TableOBJECT.NAME));
entities.TABLEA.ApplyCurrentValues(TableOBJECT);
entities.SaveChanges();

是否有任何这项工作或我是否需要跟踪那里有什么以及添加了什么?

想法?

或多或少你已经有了解决方案。 您只需要检查尝试从数据库加载对象的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();

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

我认为你必须跟踪新内容和修改内容。 如果您这样做,那么您提供的两个代码示例将起作用。 我使用的一个简单的解决方法是检查实体的主键属性是否设置为任何东西。 如果它被设置为一个值,那么这是一个更新的对象,否则它是新的。

另一种解决方案是使用Entity Framework的自我跟踪实体,但我认为这不是进入Web应用程序的正确方向(可能是在分布式WCF应用程序中)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM