【发布时间】:2015-04-18 03:04:41
【问题描述】:
我在 EF 6 代码优先中使用简单的外键定义了简单的表。
public class Address
{
/// <summary>
/// Gets or sets the id.
/// </summary>
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Column(Order = 1)]
public int Id { get; set; }
/// <summary>
/// Gets or sets the town.
/// </summary>
public virtual Town Town { get; set; }
/// <summary>
/// Gets or sets the paf address town id.
/// </summary>
[Column(Order = 2)]
public int TownId { get; set; }
}
创建表时,它会创建外键和索引。我想知道为什么,因为这样的索引通常效率很低,而且对于大型数据库来说会引起很多问题。那么为什么它只创建该索引而不是外键。以及如何默认禁用此类索引创建。
【问题讨论】:
-
我不同意:对于 SQL Server,外键列上的索引是一种非常有效 加快 JOIN 和查找速度的方法!这是我通常在 any 外键列上推荐的东西!
-
好吧,也许我效率的问题我错了,但是我还是不明白为什么要加,我们可以在EF CF中显式的加索引。那么为什么默认添加它以及如何防止这种行为呢?我知道如何使用迁移来解决这个问题,但我只是好奇。
-
@Marcin 是的,您可以通过使用数据库迁移自己控制索引。您可能还可以删除执行此行为的约定,但我对此并不积极。
标签: c# entity-framework ef-code-first