在EF 4或EF 5 Code First中,在MSDN或外键与独立关系)上使用的是什么“独立关联”和什么是“外键关联”[-实体框架5是否有改进?(添加了重点):
2.4.1使用外键关联减少视图生成成本 我们已经看到许多情况下,将模型中的关联从 独立关联转换 为 外键关联可以 极大地缩短视图生成所花费的时间。
2.4.1使用外键关联减少视图生成成本
我们已经看到许多情况下,将模型中的关联从 独立关联转换 为 外键关联可以 极大地缩短视图生成所花费的时间。
所以-现在我知道该使用哪个了。如果我能知道它们是什么,以及如何将其转换为它!那么,我的问题是,您将如何定义这些术语?哪些流利的/注解/约定调用每个?
外键关联是除了对应的导航属性之外,模型中还具有外键属性的位置。独立关联是指您的数据库中有一个外键列,但与该列相对应的外键属性不在您的模型中-即,您具有NavigationProperty,但是没有外键属性可以告诉您该ID的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; } }
这是具有外键关联的相同模型的示例(请注意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; } }
请注意,您的数据库不会更改-基础数据库始终具有外键列,但是具有独立关联却未公开。
使用外键关联,您只需更改外键的值即可更新关系。如果您知道该值,则这很方便,因为您不需要加载要将导航属性更新到的实体。