使用Entity Framework Core,我希望拥有一个Guid PK,而不会在数据库中遇到页面fragmentation。
我看过这个post和this。虽然在EF6中可行,但它的完成方式似乎已经发生了变化。
是否可以在Entity Framework Core中创建非群集主键并具有其他索引?
问答以下答案。
答案 0 :(得分:7)
可以使用EntityFrameworkCore v1.0.1或更高版本。
以下代码获得了所需的结果:
using System;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata;
namespace TestApplication.Models
{
/// <summary>
/// The context class. Make your migrations from this point.
/// </summary>
public partial class TestApplicationContext : DbContext
{
public virtual DbSet<Company> Companies { get; set; }
public TestApplicationContext(DbContextOptions<TestApplicationContext> options) : base(options)
{
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
// standard stuff here...
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Company>(entity =>
{
entity.Property<Guid>("CompanyId")
.ValueGeneratedOnAdd();
entity.Property<int>("CompanyIndex")
.UseSqlServerIdentityColumn()
.ValueGeneratedOnAdd();
entity.Property(e => e.CompanyName)
.IsRequired()
.HasColumnType("varchar(100)");
// ... Add props here.
entity.HasKey(e => e.CompanyId)
.ForSqlServerIsClustered(false)
.HasName("PK_Company");
entity.HasIndex(e => e.CompanyIndex)
.ForSqlServerIsClustered(true)
.HasName("IX_Company");
});
}
}
/// <summary>
/// The model - put here for brevity.
/// </summary>
public partial class Company
{
public Company()
{
}
public Guid CompanyId { get; set; }
public int CompanyIndex { get; set; }
public string CompanyName { get; set; }
// more props here.
}
}
Project.json
{
"version": "1.0.0-*",
"dependencies": {
"Microsoft.EntityFrameworkCore.Design": "1.0.1",
"Microsoft.EntityFrameworkCore.SqlServer": "1.0.1",
"Microsoft.EntityFrameworkCore.SqlServer.Design": "1.0.1",
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview3-final",
"NETStandard.Library": "1.6.0"
},
"tools": {
"Microsoft.EntityFrameworkCore.Tools": "1.0.0-preview3-final",
"Microsoft.AspNetCore.Server.IISIntegration.Tools": "1.0.0-preview2-final"
},
"frameworks": {
"netstandard1.6": {
"imports": "dnxcore50"
}
}
}