Это проблема вашего процесса.customer
является представлением в памяти нового Customer
.Вы определяете .Password
и .CreatedDate
только тогда, когда Id==0
, поэтому он недоступен во время процедуры обновления.И тогда ваше объявление .SetValues(customer)
устанавливает для существующих currentCustomer.Password
и currentCustomer.CreatedDate
значение null
Обновите ваш код, чтобы обновлять только те свойства из customer
, которые вы хотите обновить в currentCustomer
.Вот так:
//UPDATE
Customer currentCustomer = db.Customers.FirstOrDefault(x => x.Id == Id);
currentCustomer.Address = customer.Address;
db.Customers.Update(currentCustomer);
Для еще более чистого подхода вы можете полностью изменить его на:
Customer c;
if(Id == 0) {
c = new Customer(){
Password = MyHelper.md5(txtPassword.Text),
CreatedDate = DateTime.Now
};
}
else
c = db.Customers.FirstOrDefault(x => x.Id == Id);
if (c != null) {
c = c{
Address = txtAddress.Text,
Name = txtName.Text,
UserName = txtUserName.Text
};
if(Id != 0)
db.Customers.Update(c);
else
db.Customers.Insert(c);
db.SaveChanges();
}