代码之家  ›  专栏  ›  技术社区  ›  Miamy Dan Barrett

在数据库上下文更新期间传递了错误的连接IDextTimeString

  •  0
  • Miamy Dan Barrett  · 技术社区  · 7 年前

    namespace Layers
    {
      public class DatabaseLayer 
      {
          private Database _database;
    
          public string ConnectionString {get; set; }
      }
    }
    
    namespace Models
    {
      public class DatabaseBase : DbContext, IDisposable
      {
        private DbConnection _connection;
        private DbCommand _command;
    
        public string ConnectionString {get; set; }
      }
    
      public class Database : DatabaseBase
      {
        internal Database(string connectionString) : base(connectionString) { }
    
        public virtual DbSet<FileEntity> Files { get; set; }
      }
    }
    

    IDesignTimeDbContextFactory 无法创建“Database”类型的对象。将“IDesignTimeDbContextFactory”的实现添加到项目中 :

    namespace Models
    {
      public class DesignTimeDbContextFactory : IDesignTimeDbContextFactory<Database>
      {
        public Database CreateDbContext(string[] args)
        {
            var builder = new DbContextOptionsBuilder<Database>();
            var connectionString = @"Server=MyInstanceName;Database=MyDatabaseName;Trusted_Connection=True;";
    
            builder.UseSqlServer(connectionString, b => b.MigrationsAssembly("MyAssemblyName"));
    
            return new Database(builder.Options.ToString());
        }
      }
    }
    

    当我想跑的时候 update-database -Context Database

    System.ArgumentException异常: 初始化字符串的格式不 从索引0开始符合规范。 在 connectionString,Int32 currentPosition,StringBuilder缓冲区,布尔值 2 parsetable, String connectionString, Boolean buildChain, Dictionary 2 同义词,Boolean firstKey)在 系统数据通用.DbConnectionOptions..ctor(字符串连接字符串, 词典`2同义词)

    connectionString ,但我照旧从测试项目中复制了它,它在那里工作得很好(连接测试通过了)。

    编辑 我在调试器下运行代码,发现有错误的连接字符串发送到 Database 施工单位:

    "Microsoft.EntityFrameworkCore.DbContextOptions`1[DELay.Classes.DataModel.Database]"

    所选行包含正确的连接字符串和下一行-否。所以我的问题应该是如何从发送连接字符串 DbContextOptionsBuilder DbContext 构造函数正确。

    编辑2:

    return new Database(builder.Options.ToString());
    

    具有

    return new Database((builder.Options.Extensions.First() as 
      SqlServerOptionsExtension).ConnectionString.ToString());
    

    CreateDbContext 但我不确定这是不是一个合适的方法。。。

    0 回复  |  直到 7 年前
    推荐文章