【问题标题】:How to solve SQL Cannot find data type BLOB during code-first migration to deploy Azure如何解决 SQL 在代码优先迁移部署 Azure 期间找不到数据类型 BLOB
【发布时间】:2020-04-21 19:07:26
【问题描述】:

我想用 Azure SQL 交换我在 ASP.NET Core 上使用的当前 sqlite 数据库。我生成的资源,sql server 项目中定义的所有内容。

当我想将应用程序发布到云中 azure 和 sql 数据库的部署服务器时,它显示Cannot find data type BLOB。我在互联网上检查了解决方案但没有奏效。我想我必须更新我的模型但我没有不知道用什么方法?

一开始我把useSqlLiteServer改成了UseSqlServer

  services.AddDbContext<DataContext>(x => x.UseSqlServer(Configuration.GetConnectionString("DefaultConnection")));

我还应该对我的模型进行哪些更改,下面列出了我的一个模型,其他模型也是类似的

namespace HospitalAppointmentAPI.Models
{
    public class Patient
    {   
        public int Id { get; set; }
        public string IdentityNumber { get; set; }
        public string Name { get; set; } 
        public byte[] PasswordHash { get; set; }
        public byte[] PasswordSalt { get; set; }
        public DateTime BirthDate { get; set; }
        public string Email { get; set; }
        public ICollection<Appointment> Appointments { get; set; }

    }
}

DataContext.cs

 public class DataContext : DbContext
    {
        public DataContext(DbContextOptions<DataContext> options) : base(options) {}
        public DbSet<Hospital> Hospitals { get; set; }
        public DbSet<Department> Departments { get; set; }
        public DbSet<Doctor> Doctors { get; set; }
        public DbSet<Patient> Patients { get; set; }
        public DbSet<Appointment> Appointments { get; set; }

    }

EF 迁移脚本生成期间的完整错误消息

C:\程序 Files\dotnet\sdk\3.0.100\Sdks\Microsoft.NET.Sdk.Publish\targets\PublishTargets\Microsoft.NET.Sdk.Publish.MSDeploy.targets(140,5): 错误:Web 部署任务失败。 (期间发生错误 执行数据库脚本。错误发生在 以下脚本行:“23”和“39”。详细日志可能 有更多关于错误的信息。该命令以 下列的: “如果不存在(选择 * 从 [__EFMigrationsHisto” 列、参数或变量 #4:找不到数据类型 BLOB。 http://go.microsoft.com/fwlink/?LinkId=178587 了解更多信息: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_SQL_EXECUTION_FAILURE.) 无法发布数据库。如果远程数据库无法运行脚本,就会发生这种情况。尝试修改数据库脚本,或者 在打包/发布 Web 属性中禁用数据库发布 页。如果脚本由于数据库表已经存在而失败,请尝试 在创建新对象之前删除现有的数据库对象。更多 有关从 Visual Studio 执行这些选项的信息,请参阅 http://go.microsoft.com/fwlink/?LinkId=179181。 错误详情: 执行数据库脚本期间发生错误。错误发生在以下脚本行之间:“23”和 “39”。详细日志可能包含有关错误的更多信息。这 命令以以下内容开头: “如果不存在(选择 * 从 [__EFMigrationsHisto” 列、参数或变量 #4:找不到数据类型 BLOB。 http://go.microsoft.com/fwlink/?LinkId=178587 了解更多信息: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_SQL_EXECUTION_FAILURE。 列、参数或变量 #4:找不到数据类型 BLOB。 在 System.Data.SqlClient.SqlConnection.OnError(SqlException 异常,布尔型 breakConnection,Action1 wrapCloseInAction) at System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception, Boolean breakConnection, Action1 wrapCloseInAction) 在 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj, Boolean callerHasConnectionLock, Boolean asyncClose) 在 System.Data.SqlClient.TdsParser.TryRun(RunBehavior runBehavior,SqlCommand cmdHandler,SqlDataReader 数据流, BulkCopySimpleResultSet bulkCopyHandler, TdsParserStateObject stateObj, Boolean & dataReady) 在 System.Data.SqlClient.SqlCommand.RunExecuteNonQueryTds(字符串 方法名,布尔异步,Int32 超时,布尔异步写入) 在 System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery(TaskCompletionSource`1 完成,字符串方法名,布尔型 sendToPipe,Int32 超时, Boolean& usedCache, Boolean asyncWrite, Boolean inRetry) 在 System.Data.SqlClient.SqlCommand.ExecuteNonQuery() 在 Microsoft.Web.Deployment.DBStatementInfo.Execute(DbConnection 连接、DbTransaction 事务、DeploymentBaseContext baseContext,Int32 超时) 发布部署失败。

【问题讨论】:

  • 根据错误,可能是您代码中使用的数据类型无法转换为sql server数据类型。更多sql server数据类型详情请参考docs.microsoft.com/en-us/dotnet/framework/data/adonet/…?另外,能否请您提供您的脚本?
  • 请问您是否尝试为您的 SQl Server 数据库创建和应用初始迁移?更新我的 SQL Server 数据库后,我可以成功地从 Sqlite 切换到 SQL Server。

标签: c# sql azure asp.net-core


【解决方案1】:

在Sqlite中,类型BLOB用于存储字节数组。在 SQL Server 中,支持键入 byte[]

在您的情况下,您最初使用的是 Sqlite,然后您改为使用 SQL Server。因此,您需要删除迁移脚本历史记录。

然后为 SQl Server 数据库创建并应用 Initial Migration:

dotnet ef migrations add init -o Data\Migrations
dotnet ef database update

然后将在您的 SQL Server 数据库中创建表。您的应用程序将准备好运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-02
    • 2018-10-19
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多