Как обновить объект, который содержит коллекцию других объектов в c # в ado.net? - PullRequest
1 голос
/ 22 декабря 2011

У меня есть клиентский объект.Моя клиентская сущность имеет коллекцию объектов значения адреса, которые относятся к моей заданной сущности.Если клиент добавляет новый адрес, как мой репозиторий узнает, какой адрес новый для добавления, когда я передам его обратно в репозиторий для обновления?Я использую обычный ado.net.

public class Customer
{
    public List<Address> Addresses { get; set; }
}
public class CustomerRepository
{
    public bool Update(Customer customer)
    {
        //Update logic.
    }
}

Ответы [ 3 ]

0 голосов
/ 28 декабря 2011

Вам нужно будет отслеживать состояние коллекции адресов. Вы можете использовать флаг для каждой записи, чтобы указать, что запись была вставлена ​​или обновлена.

В качестве альтернативы, вы можете использовать DataSet, а не List <>. DataSet включает поддержку отслеживания изменений, которую вы можете привязать к ADO.NET (например, используя SqlDataAdapter).

0 голосов
/ 28 декабря 2011

Правда в том, что это что-то сложное, и поэтому вместо изобретения колеса нужно использовать ORM (EntityFramework, NHibernate и т. Д.).

Самое простое, что, я думаю, вы можете сделать, это заставить ваши сущности реализовать INotifyPropertyChanged и заставить ваш репозиторий присоединяться к PropertyChanged. Кроме того, вы можете отслеживать измененные объекты и их свойства, поэтому вы сможете создавать необходимые обновления.

Кроме того, если ваша коллекция представляет собой ObservableCollection, вы сможете отслеживать, был ли элемент добавлен (и выполнить правильную вставку), был ли удален какой-либо объект (и выполнить надлежащее удаление или обновление, если он был перемещен в другой объект). в зависимости от ожидаемой логики).

http://msdn.microsoft.com/en-us/library/system.componentmodel.inotifypropertychanged.aspx http://msdn.microsoft.com/en-us/library/ms668604.aspx

Надеюсь, это поможет.

0 голосов
/ 23 декабря 2011

Значимые объекты являются неизменяемыми. Это означает, что когда вы обновляете объект значения, вам необходимо удалить его, а затем добавить обновленный.

, поскольку идентификатор объекта значения не существует, вам придется удалить все адреса для вашей сущности / совокупного корня (клиента), а затем добавить их снова.

если ваши объекты-значения очень большие, это может указывать на то, что он не должен быть объектом-значением, а должен быть сущностью.

...