将对象发送到方法并使用它来更新数据库中的行或插入(如果不存在)

时间:2014-02-05 13:55:15

标签: c# asp.net entity-framework entity-framework-4 webforms

所以我发送一个对象到一个方法。在该方法中,如果对象已存在于数据库中,我希望更新现有行。如果数据库中不存在该对象,我想添加一个新行。

我浪费了几个小时试图完成这项工作,但我发现的解决方案似乎都没有效果。 intellisense不喜欢代码或其他一些问题。

解决方案是使用.NET 4.0的ASP.NET Webforms,所以我假设我有Entity Framework v4.0。

以下是当前代码。我没有.Entry的智能感知条目,所以为了解决这个问题,我尝试使用.ObjectStateManager.ChangeObjectState,但似乎没有相同的功能。

var itemInDb = _dbSet.SingleOrDefault(c => c.Id == company.Id);
if (itemInDb != null)
{
    _context.Entry(itemInDb).CurrentValues.SetValues(company);
}
else
{
    _dbSet.Add(company);
}
_context.SaveChanges();

3 个答案:

答案 0 :(得分:0)

DbPropertyValues.SetValues Method

  

[此页面特定于实体框架版本6.0 Beta 。最新版本可作为“实体框架”NuGet包提供。有关更多信息,请参阅实体框架版本和版本控制。]

您说您有 Entity Framework v4.0


And EF 5 seems Ok too

答案 1 :(得分:0)

最简单的方法是删除旧的,然后添加或附加新的。 这种方式实体框架应该将实体State设置为针对该id

进行修改

答案 2 :(得分:0)

这有效:

if (context.tblVehicleMaint.Any(e => e.ActivityID == mo.AID && e.VID == mo.VID))
                {
                    context.tblVehicleMaint.Attach(mo);
                    context.ObjectStateManager.ChangeObjectState(mo, System.Data.EntityState.Modified);
                }
                else
                {
                    context.tblVehicleMaint.AddObject(mo);
                }

                context.SaveChanges();