Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework ASP.NET MVC3实体框架实体未正确更新_Entity Framework_Asp.net Mvc 3 - Fatal编程技术网

Entity framework ASP.NET MVC3实体框架实体未正确更新

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

我为一个与实体框架完全无关的东西编写了一个测试程序,我认为这是一个简单的集成,结果却很麻烦。我有一个名为“TestEntry”的数据库表,它包含四个数据字段[Id(uniqueidentifier)、EId(uniqueidentifier)、Name、data],它们与任何其他数据库表无关,是独立的

该问题是一个简单的更新,定义如下:

    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.Nameentry.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:没有。检查新实体是否有值是个问题。有时只需要一双新的眼睛就能捕捉到它们。