Sco*_*ord 18 c# entity-framework-4 entity-framework-5
可能重复:
代码优先:独立关联与外键关联?
在EF 4或EF 5 Code First中,什么是"独立关联"以及什么是MSDN或外键与独立关系上使用的"外键关联" - 实体框架5有哪些改进?(重点补充):
2.4.1使用外键关联降低视图生成成本
我们已经看到了一些案例,其中模型中的关联从独立关联切换到外键关联 大大改善了视图生成所花费的时间.
所以 - 现在我知道要使用哪个.只要我知道它们是什么以及如何转换成它!那么我的问题是,您如何定义这些条款?什么流利/注释/约定调用每个?
Lad*_*nka 36
关于为何使用独立或外国关键协会的意见:
优点:
缺点:
EntityObject
基础实体而言,这不是问题,其中每个到主体实体的导航属性与另一个后缀属性配对,Reference
提供关于该关系的一些额外细节.Modified
州.每次修改总是包括将旧关系设置为已删除并创建添加的新关系 - 当您尝试使用它时,这是一个真正的混乱.优点:
缺点:
这种差异仅适用于一对多关联,因为一对一总是外键关联,而多对多总是独立关联.
Paw*_*wel 27
除了相应的导航属性之外,您还可以在外键关联中使用模型中的外键属性.独立关联是指您的数据库中有一个外键列但是与该列对应的外键属性不在您的模型中 - 即您有一个NavigationProperty但没有外键属性可以告诉您该ID的值是什么相关财产实际上没有进入相关财产.
以下是具有独立关联的模型的示例(请注意,Dependent没有外键 - 只是导航属性):
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; }
}
Run Code Online (Sandbox Code Playgroud)
这里是同一型号的,但随着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; }
}
Run Code Online (Sandbox Code Playgroud)
请注意,您的数据库不会更改 - 基础数据库始终具有外键列但具有独立关联但未公开.
使用外键关联,您只需更改外键的值即可更新关系.如果您知道该值,则这很方便,因为您不需要加载要更新导航属性的实体.