When you use the Entity Framework-generated classes, navigation properties are created for objects that participate in a relationship.
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?
问题
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