所以我发送一个对象到一个方法。在该方法中,如果对象已存在于数据库中,我希望更新现有行。如果数据库中不存在该对象,我想添加一个新行。
我浪费了几个小时试图完成这项工作,但我发现的解决方案似乎都没有效果。 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();
答案 0 :(得分:0)
DbPropertyValues.SetValues Method:
[此页面特定于实体框架版本6.0 Beta 。最新版本可作为“实体框架”NuGet包提供。有关更多信息,请参阅实体框架版本和版本控制。]
您说您有 Entity Framework v4.0 。
答案 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();