代码之家  ›  专栏  ›  技术社区  ›  sadegh

我想迁移数据库时遇到证书错误

  •  0
  • sadegh  · 技术社区  · 3 年前

    我有一个ASP.NET Core 6.0 MVC web应用程序项目,我的实体框架Core版本是7.0.9。

    例如,这是我班上的一个:

    using System.ComponentModel.DataAnnotations.Schema;
    using System.ComponentModel.DataAnnotations;
    
    namespace BusinessEntity
    {
        public class CantactUs
        {
            [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
            [Key]
            public Guid Id { get; set; }
    
            [Required, Column(TypeName = "nvarchar(50)")]
            public string title { get; set; }
    
            [Required, Column(TypeName = "nvarchar(200)")]
            public string email { get; set; }
    
            [Required, Column(TypeName = "nvarchar(5000)")]
            public string definition { get; set; }
    
            public DateTime time { get; set; }
    
            public bool read { get; set; }
        }
    }
    

    我创建 Dbcontext 像这样:

    namespace DataAcessLayer
    {
        public class DB : IdentityDbContext<User>
        {
            public DB() : base() { }
    
            public DB(DbContextOptions<DB> options) : base(options)
            {
            }
    
            protected override void OnConfiguring(DbContextOptionsBuilder OptionsBuilder)
            {
                OptionsBuilder.UseSqlServer(@"data source=.;initial catalog = stor; integrated security = true;");
                base.OnConfiguring(OptionsBuilder);
            }
    
            //public DbSet<Book> Books { set; get; }
    
            public DbSet<CantactUs> cantactUs { get; set; }
            public DbSet<Comment> comments { get; set; }
    }
    

    我在中添加了连接字符串 appsettings.json :

    "ConnectionStrings": {
        "CON1": "data source=.;initial catalog = stor; integrated security = true;"
    

    但是当我使用 add-migration update-database ,我收到此错误:

    已成功与服务器建立连接,但在登录过程中出现错误。(提供程序:SSL提供程序,错误:0-证书链是由不受信任的颁发机构颁发的。)

    我不知道如何处理,但经过一些搜索,我发现,我可以将我的连接字符串更改为:

    @"data source=.;initial catalog = stor; integrated security = true;TrustServerCertificate=True;"
    

    这个 TrustServerCertificate=True; 部分解决了我的问题,但我现在有另一个问题。我在跑步后出现了这个错误 更新数据库 命令

    给定给参数“definition”的大小(5000)超过了允许的最大值(4000)。

    但是如果我对的话 nvarchar 是“2^31-1”-如何处理证书和大小错误?

    1 回复  |  直到 3 年前
        1
  •  3
  •   Guru Stron    3 年前

    使用 nvarchar(max) :

    [Required, Column(TypeName = "nvarchar(max)")]
    public string definition { get; set; }
    

    从SQL Server docs :

    nvarchar [ ( n | max ) ] 可变大小的字符串数据。 n 以字节对为单位定义字符串大小,以及 可以是1到4000之间的值

    至于已修复的问题,它包含在EF Core 7的中断更改中- Encrypt defaults to true for SQL Server connections :

    缓解措施

    有三种方法:

    1. 在服务器上安装有效的证书。请注意,这是一个涉及的过程,需要获得证书并确保由客户端信任的权威机构签名。
    2. 如果服务器有证书,但客户端不信任它,则 TrustServerCertificate=True 以允许绕过正常的信任机制。
    3. 显式添加 Encrypt=False 连接字符串。

    你已经申请了第二个。对于非开发环境,您应该研究第一个环境。