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

没有应用程序的EF6 SQL Server配置。配置(net461/aspNetCore应用程序)

  •  -1
  • mycroes  · 技术社区  · 7 年前

    我正在转换一个正在工作的ASP。Net MVC网站到ASP。NET核心网站。我正在努力使应用程序在没有应用程序/Web的情况下工作。配置(似乎是aspnetcore应用程序的默认配置),但我与SQL Server的EntityFramework连接已断开。经过一段时间后,我发现以下错误:

    在建立与SQL Server的连接时。服务器没有 找到或无法访问。验证实例名称是否正确

    因为我没有应用程序。配置/网络。在ASP。Net Core网站我正在使用 DbConfiguration 类来告诉EF使用SQL Server:

    public class SupportManagerDbConfiguration : DbConfiguration
    {
        public SupportManagerDbConfiguration()
        {
            SetDefaultConnectionFactory(new SqlConnectionFactory());
            SetProviderServices(SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);
        }
    }
    
    [DbConfigurationType(typeof(SupportManagerDbConfiguration))]
    public class SupportManagerContext : DbContext
    {
    
        public SupportManagerContext(string nameOrConnectionString) : base(nameOrConnectionString)
        {
            Database.SetInitializer(new MigrateDatabaseToLatestVersion<SupportManagerContext, Migrations.Configuration>());
        }
    
        public DbSet<User> Users { get; set; }
    }
    
    public class User : Entity
    {
        public virtual string DisplayName { get; set; }
        [Required]
        public virtual string Login { get; set; }
    }
    
    public class Program
    {
        public static void Main(string[] args)
        {
            var db = new SupportManagerContext("Server=(local);Database=SupportManager;Integrated Security=true");
            var user = db.Users.First();
            db.Dispose();
        }
    }
    

    所以基本上,它可能归结为缺少的providerName,但我很难找到任何特定于这个问题的东西。

    1 回复  |  直到 7 年前
        1
  •  0
  •   mycroes    7 年前

    经过多次尝试和错误,解决方案非常微妙。

    SqlConnectionFactory 具有参数为“baseConnectionString”的第二个构造函数。如果我设置为 Server=(local);Integrated Security=True 然后它会突然起作用。文件 MSDN 对于无参数构造函数,请注意以下几点:

    显然没有覆盖 baseConnectionString 某种程度上阻止了这一切,正如我所预期的那样。然而,这仍然不同于配置,因为我会通过Web/App来完成。配置。

    在旧项目的Web中。配置 DefaultConnectionFactory 已设置为 LocalDbConnectionFactory DbConfiguration 类通过代码提供相同的配置:

    public class SupportManagerDbConfiguration : DbConfiguration
    {
        public SupportManagerDbConfiguration()
        {
            SetDefaultConnectionFactory(new LocalDbConnectionFactory("mssqllocaldb"));
            SetProviderServices(SqlProviderServices.ProviderInvariantName, SqlProviderServices.Instance);
        }
    }
    

    最后,我对这个解决方案有些满意,因为它至少模拟了旧的情况,尽管它仍然不像我预期的那么容易。