2012-02-15 4 views
1

Я хочу начать этот новый проект с наилучшей практикой. У меня много таблиц, которые связаны друг с другом. Пример:Лучший способ обработки просмотров

Person 
- ID 
- FirstName 
- LastName 

User 
- ID 
- PersonID 
- AddressID 

Address 
- ID 
- Line1 
- Line2 

Очевидно, что я должен буду использовать UserView вид, чтобы быть эффективным в применении. Представление объединяет эти три таблицы.

Теперь, когда кто-то вносит изменения в пользователя, мне придется запросить все три таблицы отдельно, внести изменения и затем обновить.

private void updateUser(UserView userView) 
{ 
    using (var context = getNewContext() 
    { 
     var person = context.Person.first(c => c.ID == userView.PersonID) 
     person.FirstName = userView.FirstName; 
     person.LastName = userView.LastName; 
     context.SaveChanges(); 

     var user = context.User.first(c => c.ID == userView.UserID) 
     //and so on for the 3 tables 
    } 
} 

Должен быть более эффективный способ обновления таблиц! Вы знаете какой-нибудь трюк?

+0

WPF или WinForms? – Nicolas

+0

В этом случае нет DLL. Winform в целом. – Mathieu

ответ

1

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

var user = context.User.Include("Person").Include("Address").First(c => c.ID == userView.UserID); 
user.Person.FirstName = userView.FirstName; 
user.Person.LastName = userView.LastName; 
user.Address... // etc. 

Если вы используете Linq2Sql, вы должны использовать DataLoadOptions. Существует blog post, объясняющий разницу между EF и Linq2Sql.

+0

Звучит как хорошая альтернатива взглядам! Спасибо за это предложение! – Mathieu

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