设置命令超时的位置不再与早期版本相同.
但是,我找不到任何说明如何改变它的地方.
我正在做的是上传非常大的文件,这需要超过默认的30秒保存.
请注意,我在另一个问题中询问命令超时,而不是迁移超时.
我试图通过执行自定义Sql使用Entity Framework Migration创建FULL TEXT索引.
我的迁移类看起来像这样:
public partial class DocumentContentFullTextIndex : DbMigration
{
public override void Up()
{
AlterColumn("dbo.Attachments", "ContentType", c => c.String(maxLength: 260));
Sql("CREATE FULLTEXT CATALOG FullTextIndexes AS DEFAULT;", true);
Sql(@"CREATE FULLTEXT INDEX ON [Attachments](
Content
TYPE COLUMN ContentType
Language 'ENGLISH'
)
KEY INDEX [PK_dbo.Attachments]
ON FullTextIndexes;", true);
}
public override void Down()
{
AlterColumn("dbo.Attachments", "ContentType", c => c.String(maxLength: null));
Sql("DROP FULLTEXT INDEX ON [Attachments]");
Sql("DROP FULLTEXT CATALOG FullTextIndexes");
}
}
Run Code Online (Sandbox Code Playgroud)
当我从MSSQL管理工作室运行它时,一切都很完美,SQL完全符合我的预期.
但是当从迁移项目运行时,第二个Sql请求会触发异常
超时已过期.操作完成之前经过的超时时间或服务器没有响应.
带-Verbose标志的完整堆栈跟踪:
Update-Database -ConnectionStringName DatabaseContext -Verbose
Using …Run Code Online (Sandbox Code Playgroud) full-text-indexing sql-server-2012 ef-migrations entity-framework-6
我一直在使用这样的连接字符串将我的网站连接到我的数据库:
<add name="MyDb"
connectionString="Data Source=MyDb;
Initial Catalog=Staging;
User Id=website_staging;
Password=secret;"
providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)
该website_staging用户是该角色的成员db_ddladmin,因此当我发布并且我的MigrateDatabaseToLatestVersion初始化程序运行时,它具有自动将数据库迁移到最新版本所需的权限。
我想减少标准用户的权限(通过仅将其添加到db_datareader和db_datawriter角色)并在迁移期间与不同的用户(在db_ddladmin角色中)连接。
所以我添加了另一个具有不同名称和用户的连接字符串:
<add name="Migrations"
connectionString="Data Source=MyDb;
Initial Catalog=Staging;
User Id=website_staging_migrations;
Password=secret;"
providerName="System.Data.SqlClient" />
Run Code Online (Sandbox Code Playgroud)
我更改了类中初始化的上下文所使用的连接字符串的名称DatabaseMigrationConfig:
public class DatabaseMigrationConfig
{
internal static void Register()
{
using (var context = new MyDbContext(Name="Migrations"))
{
Database.SetInitializer(new MigrateDatabaseToLatestVersion<MyDbContext,
Migrations.Configuration>());
context.Database.Initialize(false);
}
}
}
Run Code Online (Sandbox Code Playgroud)
在我的类的构造函数中,Migrations.Configuration我还更改了连接字符串:
internal sealed class Configuration : DbMigrationsConfiguration<SID2013Context>
{
public Configuration()
{
AutomaticMigrationsEnabled = false; …Run Code Online (Sandbox Code Playgroud) 我想将 ASP.Net core 2.2 中模型的主键的数据类型从 int 更改为 long,因为它即将超出 int 范围。该应用程序以代码为先,并使用 SQL 服务器作为数据库。
更改模型中的数据类型有效并且运行 Add-Migration 也有效,但 Update-Database 失败并显示错误:
System.Data.SqlClient.SqlException (0x80131904): The index 'IX_tblMTransactions_OriginalTransactionId' is dependent on column 'OriginalTransactionId'.
The object 'FK_tblMTransactions_tblMTransactions_OriginalTransactionId' is dependent on column 'OriginalTransactionId'.
Run Code Online (Sandbox Code Playgroud)
所以我阅读了它,似乎需要对迁移进行一些调整,例如在列更改之前删除外键和索引,然后将它们带回来。不幸的是,我找不到任何有关在 .net core 2.2 中执行此操作的有用信息,我找到的最接近的是这个问题,但它谈到了 .net core 2.1 和选项DropForeignKey并DropIndex
提到那里似乎不再可用.net core 2.2 根据这篇文章。
这是迁移类:
public partial class _20190817_1746 : Migration
{
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.AlterColumn<long>(
name: "OriginalTransactionId",
table: "tblMTransactions",
nullable: true,
oldClrType: typeof(int),
oldNullable: true); …Run Code Online (Sandbox Code Playgroud)