外键关联是除了相应的导航属性之外,您的模型中还有一个外键属性。独立关联是当您的数据库中有一个外键列但与该列对应的外键属性不在您的模型中 - 即您有一个 NavigationProperty 但没有外键属性可以告诉您 ID 值是什么相关属性是没有实际进入相关属性的。
这是具有独立关联的模型示例(请注意,从属没有外键 - 只是导航属性):
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; }
}
请注意,您的数据库不会更改 - 基础数据库始终具有外键列,但具有独立关联,它没有公开。
使用外键关联,您只需更改外键的值即可更新关系。如果您知道该值,这很方便,因为您不需要加载要将导航属性更新到的实体。