使用 EF 核心代码优先在不同的文件组中创建 Table
Create a Table in different File-group with EF core code-first
我想在之前在 SQL Server 2016 中创建的“辅助”文件组 中创建一个 table。我想使用 EF 核心代码优先 .
创建此 table
终于找到解决办法了,分享给大家。
- 在创建 Table 或在您的 ApplicationDbContext 中添加您的 Table 的 DbSet 之前,请在 PMC 中使用此代码创建一个空迁移。
PM> add-migration CreateSecondaryFileGroup
- 编写 SQL 查询以在“Up”方法中创建您的 文件组 及其 物理文件 。
protected override void Up(MigrationBuilder migrationBuilder)
{
//create FILEGROUP
migrationBuilder.Sql(
" EXEC('ALTER DATABASE [YourDatabaseName] ADD FILEGROUP [Secondary]')",
suppressTransaction: true);
//Create Physical file
migrationBuilder.Sql(
"ALTER DATABASE [YourDatabaseName] " +
"ADD FILE " +
"( " +
"NAME = 'Secondary_Data', " +
"FILENAME = '[yourFileDirectory]' " +
//for example:
//"FILENAME = 'D:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\Abby_Data2.mdf' " +
") " +
"TO FILEGROUP Secondary",
suppressTransaction:true
);
}
- 然后在 PMC 运行 中使用此代码更新您的数据库并创建文件组。
PM> update-database
- 现在在 ApplicationDbContext 文件中添加你的 tables 的 DbSet,(我的 table 名称是 Category)
public DbSet<Category> Category { get; set; }
- 现在创建一个新的迁移文件,以便在您的特定文件组中的数据库中创建 table 使用 PMC 中的此代码
PM> add-migration CreateCategoryTableInSecondaryFileGroup
- 现在,在迁移文件的“向上”方法中,您应该使用SQL 方法添加SQL 查询以“再次创建table 的簇索引” 的 migrationBuilder。
创建或移动 table 到另一个文件组的一种解决方案是在特定文件组中创建聚簇索引。
聚簇索引是名称为“PK_Category”
的“Category”table的主键
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Category",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
DisplayOrder = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Category", x => x.Id);
});
///// this below code is the key point
///// you should write the below code
migrationBuilder.Sql(
"CREATE UNIQUE CLUSTERED INDEX PK_Category ON Category (Id)"+
" WITH(DROP_EXISTING = ON) "+
" ON Secondary"
, suppressTransaction:true);
}
- 最后,运行这段代码更新PMC中的数据库。
PM> update-database
我想在之前在 SQL Server 2016 中创建的“辅助”文件组 中创建一个 table。我想使用 EF 核心代码优先 .
创建此 table终于找到解决办法了,分享给大家。
- 在创建 Table 或在您的 ApplicationDbContext 中添加您的 Table 的 DbSet 之前,请在 PMC 中使用此代码创建一个空迁移。
PM> add-migration CreateSecondaryFileGroup
- 编写 SQL 查询以在“Up”方法中创建您的 文件组 及其 物理文件 。
protected override void Up(MigrationBuilder migrationBuilder)
{
//create FILEGROUP
migrationBuilder.Sql(
" EXEC('ALTER DATABASE [YourDatabaseName] ADD FILEGROUP [Secondary]')",
suppressTransaction: true);
//Create Physical file
migrationBuilder.Sql(
"ALTER DATABASE [YourDatabaseName] " +
"ADD FILE " +
"( " +
"NAME = 'Secondary_Data', " +
"FILENAME = '[yourFileDirectory]' " +
//for example:
//"FILENAME = 'D:\Program Files\Microsoft SQL Server\MSSQL13.MSSQLSERVER\MSSQL\DATA\Abby_Data2.mdf' " +
") " +
"TO FILEGROUP Secondary",
suppressTransaction:true
);
}
- 然后在 PMC 运行 中使用此代码更新您的数据库并创建文件组。
PM> update-database
- 现在在 ApplicationDbContext 文件中添加你的 tables 的 DbSet,(我的 table 名称是 Category)
public DbSet<Category> Category { get; set; }
- 现在创建一个新的迁移文件,以便在您的特定文件组中的数据库中创建 table 使用 PMC 中的此代码
PM> add-migration CreateCategoryTableInSecondaryFileGroup
- 现在,在迁移文件的“向上”方法中,您应该使用SQL 方法添加SQL 查询以“再次创建table 的簇索引” 的 migrationBuilder。
创建或移动 table 到另一个文件组的一种解决方案是在特定文件组中创建聚簇索引。 聚簇索引是名称为“PK_Category”
的“Category”table的主键protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "Category",
columns: table => new
{
Id = table.Column<int>(type: "int", nullable: false)
.Annotation("SqlServer:Identity", "1, 1"),
Name = table.Column<string>(type: "nvarchar(50)", maxLength: 50, nullable: false),
DisplayOrder = table.Column<int>(type: "int", nullable: false)
},
constraints: table =>
{
table.PrimaryKey("PK_Category", x => x.Id);
});
///// this below code is the key point
///// you should write the below code
migrationBuilder.Sql(
"CREATE UNIQUE CLUSTERED INDEX PK_Category ON Category (Id)"+
" WITH(DROP_EXISTING = ON) "+
" ON Secondary"
, suppressTransaction:true);
}
- 最后,运行这段代码更新PMC中的数据库。
PM> update-database