Ассоциация внешнего ключа — это когда у вас есть свойство внешнего ключа в вашей модели в дополнение к соответствующему свойству навигации. Независимая ассоциация — это когда у вас есть столбец внешнего ключа в вашей базе данных, но свойство внешнего ключа, соответствующее этому столбцу, отсутствует в вашей модели, т. е. у вас есть свойство NavigationProperty, но нет свойства внешнего ключа, которое сообщало бы вам значение идентификатора родственное имущество, фактически не переходя к родственному имуществу.
Вот пример модели с независимой ассоциацией (обратите внимание, что у зависимого нет внешнего ключа — только свойство навигации):
public class Dependent
{
public int Id { get; set; }
[Required]
public Principal PrincipalEntity { get; set; }
}
public class Principal
{
public int Id { get; set; }
public ICollection<Dependent> DependentEntities { get; set; }
}
public class MyContext : DbContext
{
public DbSet<Dependent> Dependents { get; set; }
public DbSet<Principal> Principals { get; set; }
}
А вот пример той же модели, но с ассоциацией ForeignKey (обратите внимание на свойство PrincipalEntity_Id и атрибут [ForeignKey()]):
public class Dependent
{
public int Id { get; set; }
public int PrincipalEntity_Id { get; set; }
[Required]
[ForeignKey("PrincipalEntity_Id")]
public Principal PrincipalEntity { get; set; }
}
public class Principal
{
public int Id { get; set; }
public ICollection<Dependent> DependentEntities { get; set; }
}
public class MyContext : DbContext
{
public DbSet<Dependent> Dependents { get; set; }
public DbSet<Principal> Principals { get; set; }
}
Обратите внимание, что ваша база данных не изменится — в базовой базе данных всегда был столбец для внешнего ключа, но с независимой ассоциацией он не был раскрыт.
С помощью ассоциаций внешнего ключа вы можете обновить отношения, просто изменив значение внешнего ключа. Это удобно, если вы знаете значение, потому что вам не нужно загружать объект, для которого вы хотите обновить свойство навигации.
person
Pawel
schedule
26.09.2012