Присоединение сущности с ассоциацией для модификации - PullRequest
4 голосов
/ 07 марта 2011

Я бы изменил отдельную сущность со связанной коллекцией, например:

Персона и Адрес - это POCO.

Когда я присоединяю сущность и сохраняю изменения, изменения коллекции не обнаруживаются, как можноОбновить личность по адресу (добавленные и удаленные элементы)?

Должен ли я отслеживать мою коллекцию вручную?

Редактировать

Синхронизация отдельного POCO должна быть ручной ... EF не имеет цели слияниярешение коллекции (навигационные свойства и отношения): (

Я сравниваю текущие и оригинальные коллекции, и я обнаруживаю различия

Ответы [ 2 ]

1 голос
/ 06 сентября 2011

Вы также можете работать с отсоединенным классом POCO, а затем повторно присоединить его к контексту и установить измененное состояние:

Прочитать эту статью: http://blogs.msdn.com/b/adonet/archive/2011/01/29/using-dbcontext-in-ef-feature-ctp5-part-4-add-attach-and-entity-states.aspx

1 голос
/ 08 марта 2011

Если вы используете Entity Framework, который, как я предполагаю, используется, поскольку вы указали его в качестве тега в своем вопросе, тогда объекты отслеживают свои изменения только тогда, когда они генерируются контекстом сущности.

User someUser = dbEntities.Users.Single(x => x.Username == "test");
someUser.Name = "changed name";
db.SaveChanges();

Этот код обнаружит изменения и сохранит их.

User someUser = new User()
{
    Username = "test" //assuming there is already user called test in the database.
}

Создание пользователя таким образом не позволит контексту EF обнаруживать изменения. Вместо этого вам нужно будет загрузить объект из базы данных, обновить его и сохранить изменения.

string username = "test";
User someUser = db.Users.Single(x => x.Username == username);
TryUpdateModel(someUser, valueProvider); //valueProvider is usually a form collection of some sort, but could be anything that implements IValueProvider.
db.SaveChanges();

Это позволит вам добавить сущность, обновить ее и сохранить изменения.

...