Entity framework ASP.NET MVC3实体框架实体未正确更新
我为一个与实体框架完全无关的东西编写了一个测试程序,我认为这是一个简单的集成,结果却很麻烦。我有一个名为“TestEntry”的数据库表,它包含四个数据字段[Id(uniqueidentifier)、EId(uniqueidentifier)、Name、data],它们与任何其他数据库表无关,是独立的 该问题是一个简单的更新,定义如下:Entity framework ASP.NET MVC3实体框架实体未正确更新,entity-framework,asp.net-mvc-3,Entity Framework,Asp.net Mvc 3,我为一个与实体框架完全无关的东西编写了一个测试程序,我认为这是一个简单的集成,结果却很麻烦。我有一个名为“TestEntry”的数据库表,它包含四个数据字段[Id(uniqueidentifier)、EId(uniqueidentifier)、Name、data],它们与任何其他数据库表无关,是独立的 该问题是一个简单的更新,定义如下: EDMEntities _db = new EDMEntities(); public List<TestEntry> GetEn
EDMEntities _db = new EDMEntities();
public List<TestEntry> GetEntities()
{
return _db.TestEntries.ToList();
}
public void EditEntry(TestEntry newEntry)
{
TestEntry entry = _db.TestEntries.FirstOrDefault(e => e.Id == newEntry.Id);
if (string.IsNullOrEmpty(newEntry.Name)) { entry.Name = newEntry.Name; }
if (string.IsNullOrEmpty(newEntry.Data)) { entry.Data = newEntry.Data; }
if (entry.EntityState == System.Data.EntityState.Modified)
{
_db.SaveChanges();
}
}
EDMEntities\u db=新的EDMEntities();
公共列表GetEntities()
{
返回_db.TestEntries.ToList();
}
公共作废编辑条目(TestEntry newEntry)
{
TestEntry条目=_db.TestEntries.FirstOrDefault(e=>e.Id==newEntry.Id);
if(string.IsNullOrEmpty(newEntry.Name)){entry.Name=newEntry.Name;}
if(string.IsNullOrEmpty(newEntry.Data)){entry.Data=newEntry.Data;}
if(entry.EntityState==System.Data.EntityState.Modified)
{
_db.SaveChanges();
}
}
经过这一步,我注意到:
- entry.Name和entry.Data都不会使用newEntry
- EntityState保持不变,因此不进入条件状态
有什么想法吗?你需要否定这些条件
if (!string.IsNullOrEmpty(newEntry.Name))
注意感叹号。您需要否定条件句
if (!string.IsNullOrEmpty(newEntry.Name))
注意感叹号。不应该是:
if (!string.IsNullOrEmpty(newEntry.Name)) { entry.Name = newEntry.Name; }
if (!string.IsNullOrEmpty(newEntry.Data)) { entry.Data = newEntry.Data; }
难道不是:
if (!string.IsNullOrEmpty(newEntry.Name)) { entry.Name = newEntry.Name; }
if (!string.IsNullOrEmpty(newEntry.Data)) { entry.Data = newEntry.Data; }
你是说entry.EntityState!=System.Data.EntityState.Modified as仍然不会产生任何结果,因为实际实体没有得到更新。@Cosmin Parculescu:没有。检查新实体是否有值是个问题。有时只需要一双新的眼睛就能捕捉到它们。你是说entry.EntityState!=System.Data.EntityState.Modified as仍然不会产生任何结果,因为实际的实体没有得到更新。@Cosmin Parculescu:没有。检查新实体是否有值是个问题。有时只需要一双新的眼睛就能捕捉到它们。