zl程序教程

您现在的位置是:首页 >  其它

当前栏目

What are the Navigation Properties in Entity Framework

in The Framework are properties What Entity navigation
2023-09-11 14:14:17 时间

What are the Navigation Properties in Entity Framework

 

回答1

Navigation properties represents related entites to the principal entity. Foreign Keys are usually represented by navigation properties.

Ex : if you have two tables Invoice and invoice items and those tables have a relation 1-> many so you'll find a navigation property in invoice entity that lists all invoice items related to an invoice.
Hope it helps.

 

回答2

Navigation properties in the Entity Framework provide a way to navigate an association between two entity types. Every object can have a navigation property for every relationship in which it participates. Navigation properties allow you to navigate and manage relationships in both directions, returning either an EntityReference, if the multiplicity is either one or zero-or-one, or an EntityCollection, if the multiplicity is many.

When you use the Entity Framework-generated classes, navigation properties are created for objects that participate in a relationship.

UPDATE: Here is nice navigation properties example for relations between books, authors and publishers.

 

回答3

Navigation Property is mainly used for Foreign key relationship in EF. i.e. User to Roles, product to categories etc.

so if you have Order with OrderLines, navigation property will say Order_OrderLineItems and you can access complete line items associated with it.

have a look some of the explanation here, What are Navigation Properties in Entity Framework for?

 

What are Navigation Properties in Entity Framework for?

问题

I see in my EF diagram alot of these navigation properties but not sure what they are really for. Like I see in lots of my tables I have aspnet_Users properties.

What are these for? Do they help for joins? or what?

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.

 

 回答

A navigation property allows you to navigate from one entity to a "connected" entity.

E.g. if your user is connected to a role, you can use the "Role" navigation to read and inspect the role associated with the user.

EDIT:

If you want to load the user with LINQ-to-Entities, and also look at its "Role" navigation property, you have to explicitly include the "Role" entity in your LINQ query - EF does NOT load those navigation properties automatically for you.

  // 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;

It's basically a programmatic equivalent to a foreign key relationship in a database - a connection between two objects. It basically "hides" or resolves a join between two tables (or two entities, in EF speak).

Marc