2011-12-22 1 views
1

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

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

Вы используете платформу Entity Framework или необработанный ADO.NET? –

+0

Просто raw ADO.NET. Благодарю. – Frankie

+0

Снимок. Сравните состояние до и после выполнения изменений состояния и получения намерений (плохо, но ваш выбор). –

ответ

0

Истина заключается в том, что это что-то сложное, и поэтому следует использовать 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

Объекты значения неизменяемы, что означает, что при обновлении объекта значения его необходимо удалить, а затем добавить обновленный.

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

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

0

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

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

Смежные вопросы