Прежде всего, вы не можете использовать как независимый, так и внешний ключ связи - вы используете либо первое, либо второе.Разница в том, используете ли вы свойство FK или нет.Если вы используете ассоциацию с внешним ключом, вы должны использовать внешний ключ для построения отношения.По этой причине ассоциация FK была введена в EFv4.
Редактировать:
Простой пример, почему вы должны использовать FK вместо свойства навигации при использовании пользовательских POCO (обычно в EFv4.1) и FKотношения:
Это работает без проблем:
var child = new ChildEntity() {Id = 1};
child.ParentEntityId = 1; // Assigning FK
context.Childs.Attach(child);
context.Entry(child).State = EntityState.Modified;
context.SaveChanges();
Это исключение:
var parent = new ParentEntity() { Id = 1 };
context.Parents.Attach(parent);
var child = new ChildEntity() {Id = 1};
child.Parent = parent; // <-- Assigning only navigation property
// Next line will cause InvalidOperationException:
// A referential integrity constraint violation occurred:
// The property values that define the referential constraints
// are not consistent between principal and dependent objects in
// the relationship.
context.Childs.Attach(child);
context.Entry(child).State = EntityState.Modified;
context.SaveChanges();
Это снова работает без проблем:
var parent = new ParentEntity() { Id = 1 };
context.Parents.Attach(parent);
var child = new ChildEntity() {Id = 1};
child.Parent = parent;
child.ParentEntityId = 1; // <-- AGAIN assigning FK
context.Childs.Attach(child);
context.Entry(child).State = EntityState.Modified;
context.SaveChanges();