How to update one field of specific records using Entity Framework?
For resolving this error i got values by ID from database stored in Var Temprc. Then updated the field Password which i wont to update. Then attached temprc to my Userregistrations model. Then Marked PasswordConfirm isModified. then Savechanges();
using (var db = new Entities())
{
var temprc = _reg.GetUserByID(Convert.ToInt32(Session["LogedUserID"]));
temprc.PasswordConfirm = U.NewPassword;
db.Userregistrations.Attach(temprc);
db.Entry(temprc).Property(x => x.PasswordConfirm).IsModified = true;
db.SaveChanges();
}
You are missing an Id field when creating an instance of Person object. Because of this Entity Framework is not able to find an existing Person.
Your code should look like this:
public static void Update(int id, string name, string family)
{
var _person = new Person() { Id = id , FirstName = name, LastName = family };
using (var newContext = new MyDbContext())
{
newContext.Persons.Attach(_person);
newContext.Entry(_person).Property(X => X.LastName).IsModified = true;
newContext.SaveChanges();
}
EDIT: assume that i don't know person's Id, and i just know person's name, is there any way to update person's family?
I'm assuming that the FirstName
field of Person
class contains the person's name, and updating the person's family means updating the LastName
field.
The first step is to get all Person
records with FirstName
equals the person's name, let's say it's "pejman" so the code would be as below.
var personsToUpdate = newContext.Persons.Where(o => o.FirstName == "pejman");
The next step is enumerate personsToUpdate
and set the LastName
property to the family name you want, then call .SaveChanges()
method of the DbContext
to submit the changes to the database. Let's say you want to update the person's family name to "MyFamilyName", the code would be as below
foreach (Person p in personsToUpdate)
{
p.LastName = "MyFamilyName";
}
newContext.SaveChanges();
The following is the modified code of your Update
method with the name
and family
parameter.
public static void Update(string name, string family)
{
using (var newContext = new MyDbContext())
{
// get all Persons with FirstName equals name
var personsToUpdate = newContext.Persons.Where(o => o.FirstName == name);
// update LastName for all Persons in personsToUpdate
foreach (Person p in personsToUpdate)
{
p.LastName = family;
}
newContext.SaveChanges();
}
}