У меня есть модель представления, которая инкапсулирует только некоторые свойства модели базы данных. Эти свойства, содержащиеся в модели представления, являются единственными свойствами, которые я хочу обновить. Я хочу, чтобы другие свойства сохраняли свое значение.
Во время моего исследования я нашел этот ответ, который кажется идеальным для моих нужд, однако, несмотря на все мои усилия, я не могу получить код для работы, как ожидалось.
Вот отдельный пример того, что я придумал:
static void Main() {
// Person with ID 1 already exists in database.
// 1. Update the Age and Name.
Person person = new Person();
person.Id = 1;
person.Age = 18;
person.Name = "Alex";
// 2. Do not update the NI. I want to preserve that value.
// person.NINumber = "123456";
Update(person);
}
static void Update(Person updatedPerson) {
var context = new PersonContext();
context.Persons.Attach(updatedPerson);
var entry = context.Entry(updatedPerson);
entry.Property(e => e.Name).IsModified = true;
entry.Property(e => e.Age).IsModified = true;
// Boom! Throws a validation exception saying that the
// NI field is required.
context.SaveChanges();
}
public class PersonContext : DbContext {
public DbSet<Person> Persons { get; set; }
}
public class Person {
public int Id { get; set; }
[Required]
public string Name { get; set; }
[Required]
public int Age { get; set; } // this is contrived so, yeah.
[Required]
public string NINumber { get; set; }
}
Что я делаю не так?
State
значенияEntityState.Modified
не помогает. Спасибо, в любом случае. - person Caster Troy   schedule 09.05.2014context.Entry(updatedPerson).State = EntityDtate.Modified;
, но это предполагает, чтоupdatedPerson
является объектом EF, а не просто обычным объектом класса. - person mituw16   schedule 09.05.2014NINumber
(в этом случае оно станетnull
и вызовет ошибку проверки). Это то, чего я пытаюсь избежать. - person Caster Troy   schedule 09.05.2014