Entity framework 4 使用实体框架4.1更新实体

Entity framework 4 使用实体框架4.1更新实体,entity-framework-4,entity-framework-4.1,Entity Framework 4,Entity Framework 4.1,我正在尝试使用EntityFramework4.1代码优先方法更新实体。我正在使用以下代码: public void UpdatePersonEmail(long registryID, string Email) { var Person = context.Persons.FirstOrDefault(p => p.RegistryID == registryID); // Person = person; Pers

我正在尝试使用EntityFramework4.1代码优先方法更新实体。我正在使用以下代码:

public void UpdatePersonEmail(long registryID, string Email) {
            var Person = context.Persons.FirstOrDefault(p => p.RegistryID == registryID);
          //  Person = person;
            Person.Email = Email;
            try
            {
                context.Persons.Attach(Person);
                context.Entry(Person).State = System.Data.EntityState.Modified;
                context.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                foreach (var validationErrors in dbEx.EntityValidationErrors)
                {
                    foreach (var validationError in validationErrors.ValidationErrors)
                    {
                        Trace.TraceInformation("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);
                    }
                }
            }
        }
代码未给出任何错误,但实体未更新。我只想更新电子邮件地址


请向我推荐解决方案。

任何时候,您在执行FirstOrDefault时,都应该检查以确保实体不为空。试试这个:

public void UpdatePersonEmail(long registryID, string Email) 
{
    var person = context.Persons.FirstOrDefault(p => p.RegistryID == registryID);
    try
    {
        person.Email = Email;
        context.SaveChanges();
    }
    catch (DbEntityValidationException dbEx)
    {
        foreach (var validationErrors in dbEx.EntityValidationErrors)
        {
            foreach (var validationError in validationErrors.ValidationErrors)
            {
                Trace.TraceInformation("Property: {0} Error: {1}", 
                    validationError.PropertyName, validationError.ErrorMessage);
            }
        }
    }
    catch (NullReferenceException nrEx)
    {
        Trace.TraceInformation("person was null.");
    }
}

尝试对数据库运行sql跟踪,以查看实际发送的sql。此外,您实际上不需要将其附加到上下文,因为您已经从上下文中获得了Person对象。EF将找出发生了什么变化。我发现context.SaveChanges没有错误;是否应该保存所有更改。尝试删除行context.EntryPerson.State=System.Data.EntityState.Modified;。我看这行没有意义。@rekire我删除了它,但仍然不起作用。我会说删除context.Persons.AttachPerson;context.EntryPerson.State=System.Data.EntityState.Modified;线