设置PK使用EF6流畅的api进行聚类

时间:2015-08-22 07:15:59

标签: c# entity-framework-6 ef-fluent-api

我不得不使用迁移将主键设置为非群集但我无法使用流畅的API来设置它。

是否有任何方法/ hack来扩展流畅的API以支持设置主键IsClustered属性,以便在我们添加迁移时生成的C#代码也显示正确的实现?

2 个答案:

答案 0 :(得分:0)

流畅的API主要针对映射,而不是数据库设计。我认为它应该保持这种状态。 API不应该混淆问题。有关聚簇索引的规则不属于映射API。它与映射无关,无论索引是否已群集。此外,聚簇索引的规则是特定于数据库的,因此它们只能在Provider中实现。但是映射API并不了解任何提供者。

在我个人看来,即使是IndexAttribute(在EF 6.1中引入)也是一种不可理喻的妥协。 (虽然显然它将外键关联映射到唯一索引,但will be supported in EF7)。

相反,HasKey方法虽然也深入涉及数据库设计规则,但确实有意义,因为EF需要知道实体的主键。它在所有CRUD行动中都至关重要。并且'主键'是所有RDBMS供应商共享的概念。

答案 1 :(得分:0)

对于EF 7来说,它变得简单了。您可以将以下选项与haskey选项一起使用。

ForSqlServerIsClustered(false); 

我们可以像

一样使用它
supplierItemEntity.HasKey(supplierItem => supplierItem.SupplierItemId).ForSqlServerIsClustered(false);

 supplierItemEntity.HasIndex(s => new { s.ItemId }).ForSqlServerIsClustered(true).HasName("IX_SupplierItem_ItemId");

enter image description here