Для чего нужны свойства навигации в Entity Framework? - PullRequest
27 голосов
/ 11 августа 2009

Я вижу на своей диаграмме EF множество этих навигационных свойств, но не уверен, для чего они на самом деле. Как я вижу во многих моих таблицах, у меня есть свойства aspnet_Users.

Для чего они? Они помогают для объединений? или что?

Error 2
Error 3007: Problem in Mapping Fragments starting at lines 1201, 1423: 
Non-Primary-Key column(s) [Field2] are being mapped in both fragments 
to different conceptual side properties - data inconsistency is possible 
because the corresponding conceptual side properties can be independently 
modified.

1 Ответ

45 голосов
/ 11 августа 2009

Свойство навигации позволяет вам переходить от одного объекта к «связанному» объекту.

например. если ваш пользователь подключен к роли, вы можете использовать навигацию «Роль», чтобы прочитать и проверить роль, связанную с пользователем.

EDIT:

Если вы хотите загрузить пользователя с LINQ-to-Entities, а также посмотреть его свойство навигации «Role», вам необходимо явно включить сущность «Role» в ваш запрос LINQ - EF делает NOT автоматически загружать эти свойства навигации.

  // load user no. 4 from database
   User myUser = from u in Users.Include("Role")
                 where u.ID = 4
                 select u;

   // look at the role the user has
   string roleName = myUser.Role.Name;

OR

   // load user no. 4 from database
   User myUser = from u in Users
                 where u.ID = 4
                 select u;

   // check to see if RoleReference is loaded, and if not, load it
   if(!myUser.RoleReference.IsLoaded)
   {
      myUser.RoleReference.Load();
      // now, the myUser.Role navigation property should be loaded and available
   }

   // look at the role the user has
   string roleName = myUser.Role.Name;

Это в основном программный эквивалент отношения внешнего ключа в базе данных - соединение между двумя объектами. По сути, он «скрывает» или разрешает объединение двух таблиц (или, как говорят в EF, двух сущностей).

Марк

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...