.NET Core配置连接字符串和获取数据库上下文实例

2022-04-16 18:06:40

假设数据库就两个表:User、Blogs,

模型类如下

    public class User    {        public int Id { get; set; }        public string Name { get; set; }        public string Number { get; set; }        public string Email { get; set; }    }        public class Blogs    {        public int Id { get; set; }        public string BolgName { get; set; }        public string Url { get; set; }    }

数据库上下文大致这样

    public class DataContext : DbContext    {        public DataContext()        {        }        public DataContext(DbContextOptions<DataContext> options) : base(options)        {        }        public DbSet<User> Use var sqliteContext = services.GetService<DataContext>();            return sqliteContext;        }        /// <summary>        /// 获取上下文        /// </summary>        public static DataContext GetContext()        {            var services = ServiceProvider();            var sqliteContext = services.GetService<DataContext>();            return sqliteContext;        }    }

需要使用时可以这样获取上下文

            var context = ContextService.GetContext();            var list = context.Users.ToList();

无签名上下文 OnConfigure 配置

上面两个示例中,连接字符串都是使用 Action<DbContextOptionsBuilder> optionsAction 来配置的。

options => options.UseSqlite("filename=Database.db")

我们可以直接在上下文的 OnConfigure 方法里,配置默认使用的连接字符串。

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)        {            #if DEBUG            optionsBuilder.UseSqlite("filename=Database.db");#endif        }

但是,极其不建议这样做,一般可能调试环境或为了方便在里面这样做。

这种情况是上下文存在一个无签名构造函数时,外界使用此构造函数直接实例化上下文。

            var context = new DataContext();            var list = context.Users.ToList();

这种情况下,是直接实例化上下文,并且使用默认的连接字符串。

OnConfiguring会在无注入、也没有使用有签名构造函数时才会生效,或者描述为多种配置上下文方式中优先级最低。

有签名上下文构造函数和自己new一个上下文

上下文必须具有 DbContextOptions 或 DbContextOptions<T> 的构造函数,建议使用泛型形式。

构造函数示例:

        public DataContext(DbContextOptions<DataContext> options) : base(options)        {        }

具有此构造函数,则可以通过外界注入配置,例如

            services.AddDbContext<DataContext>(options=>options.UseSqlite("filename=Database.db"));

如果你不使用注入(Microsoft.Extensions.DependencyInjection)或者第三方 ioc 工具,那么无法使用上面这种形式。

不过可以自己 new,自己传递配置对象,

            var optionsBuilder = new DbContextOptionsBuilder<DataContext>();            optionsBuilder.UseSqlite("filename=Database.db");            DataContext context = new DataContext(optionsBuilder.Options);            var list = context.Users.ToList();

 到此这篇关于.NET Core配置连接字符串和获取数据库上下文实例的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持我们。