Entity framework 4 使用实体框架4.1更新实体
我正在尝试使用EntityFramework4.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
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;线