У меня есть следующий случай:
Мне нужно изменить тип столбца с bool
на enum
:
С этого:
public class Project : BaseEntity
{
public bool IsAccountManagerIncludedAsApprover { get; set; }
}
Для этого:
public class Project : BaseEntity
{
public AccountManagerUserRequestOptions AccountManagerUserRequestOption { get; set; }
}
Перечисление AccountManagerUserRequestOptions является следующим:
public enum AccountManagerUserRequestOptions
{
ProcessUserRequest,
OnlyNotifyForUserRequests,
DoNothing
}
Что мне нужно сделать, это где значение true (когда столбец имеет тип bool
) для установки AccountManagerUserRequestOptions.ProcessUserRequest
.
Я нашел один способ сделать это с помощью явных миграций, например так:
public partial class Change_IsAccountManagerIncludedAsApprover_InProjectEntity : DbMigration
{
public override void Up()
{
AddColumn("dbo.Projects", "AccountManagerUserRequestOption", c => c.Int(nullable: false));
Sql(@"UPDATE dbo.Projects SET AccountManagerUserRequestOption = 0 WHERE IsAccountManagerIncludedAsApprover = 1");
Sql(@"UPDATE dbo.Projects SET AccountManagerUserRequestOption = 2 WHERE IsAccountManagerIncludedAsApprover = 0");
DropColumn("dbo.Projects", "IsAccountManagerIncludedAsApprover");
}
public override void Down()
{
AddColumn("dbo.Projects", "IsAccountManagerIncludedAsApprover", c => c.Boolean(nullable: false));
Sql(@"UPDATE dbo.Projects SET IsAccountManagerIncludedAsApprover = 1 WHERE AccountManagerUserRequestOption = 0");
Sql(@"UPDATE dbo.Projects SET IsAccountManagerIncludedAsApprover = 0 WHERE AccountManagerUserRequestOption = 2");
DropColumn("dbo.Projects", "AccountManagerUserRequestOption");
}
}
Проблема здесь в том, что я хочу избежать необработанного SQL запросы
Sql(@"UPDATE dbo.Projects SET IsAccountManagerIncludedAsApprover = 1 WHERE AccountManagerUserRequestOption = 0");
Sql(@"UPDATE dbo.Projects SET IsAccountManagerIncludedAsApprover = 0 WHERE AccountManagerUserRequestOption = 2");
и
Sql(@"UPDATE dbo.Projects SET AccountManagerUserRequestOption = 0 WHERE IsAccountManagerIncludedAsApprover = 1");
Sql(@"UPDATE dbo.Projects SET AccountManagerUserRequestOption = 2 WHERE IsAccountManagerIncludedAsApprover = 0");
Есть ли способ выполнить эту миграцию данных без использования raw SQL?
Причина, по которой я спрашиваю это потому что мы переходим на PostgreSQL и хотим избежать необработанных SQL запросов.