最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

.NET?Core配置連接字符串和獲取數(shù)據(jù)庫(kù)上下文實(shí)例

 更新時(shí)間:2022年01月23日 08:32:25   作者:癡者工良  
這篇文章介紹了.NET?Core配置連接字符串和獲取數(shù)據(jù)庫(kù)上下文實(shí)例的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧

假設(shè)數(shù)據(jù)庫(kù)就兩個(gè)表: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; }
    }

數(shù)據(jù)庫(kù)上下文大致這樣

    public class DataContext : DbContext
    {
        public DataContext()
        {
        }

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

        public DbSet<User> Users { get; set; }
        public DbSet<Blog> Blogs { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            base.OnConfiguring(optionsBuilder);
        }

        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
        }

        /*
         * 其他實(shí)現(xiàn)
         */
    }

ASP.NET Core 注入

ASP.NET Core 的數(shù)據(jù)庫(kù)注入是最為簡(jiǎn)單方便的了,在 ConfigureServices 配置即可。

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

然后在控制器等地方使用,不需要什么多余代碼。

    [ApiController]
    [Route("[controller]")]
    public class WeatherForecastController : ControllerBase
    {
        private readonly DataContext _context;

        public WeatherForecastController(DataContext context)
        {
            _context = context;
        }
     }

.NET Core 注入

需要安裝一個(gè) Nuget 包

Microsoft.Extensions.DependencyInjection

創(chuàng)建一個(gè)類 ContextService,用來(lái)配置注入和獲取上下文。

    public class ContextService
    {
        /// <summary>
        /// 配置各種服務(wù)
        /// </summary>
        /// <returns></returns>
        public static IServiceProvider ServiceProvider()
        {
            IServiceCollection services = new ServiceCollection();

            services.AddDbContext<DataContext>(options => options.UseSqlite("filename=Database.db"));
            var serviceProvider = services.BuildServiceProvider();
            return serviceProvider;
        }

        /// <summary>
        /// 獲取上下文
        /// </summary>
        /// <param name="services"></param>
        /// <returns></returns>
        public static DataContext GetContext(IServiceProvider services)
        {
            var sqliteContext = services.GetService<DataContext>();
            return sqliteContext;
        }

        /// <summary>
        /// 獲取上下文
        /// </summary>
        public static DataContext GetContext()
        {
            var services = ServiceProvider();
            var sqliteContext = services.GetService<DataContext>();
            return sqliteContext;
        }
    }

需要使用時(shí)可以這樣獲取上下文

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

無(wú)簽名上下文 OnConfigure 配置

上面兩個(gè)示例中,連接字符串都是使用 Action<DbContextOptionsBuilder> optionsAction 來(lái)配置的。

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

我們可以直接在上下文的 OnConfigure 方法里,配置默認(rèn)使用的連接字符串。

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

但是,極其不建議這樣做,一般可能調(diào)試環(huán)境或?yàn)榱朔奖阍诶锩孢@樣做。

這種情況是上下文存在一個(gè)無(wú)簽名構(gòu)造函數(shù)時(shí),外界使用此構(gòu)造函數(shù)直接實(shí)例化上下文。

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

這種情況下,是直接實(shí)例化上下文,并且使用默認(rèn)的連接字符串。

OnConfiguring會(huì)在無(wú)注入、也沒有使用有簽名構(gòu)造函數(shù)時(shí)才會(huì)生效,或者描述為多種配置上下文方式中優(yōu)先級(jí)最低。

有簽名上下文構(gòu)造函數(shù)和自己new一個(gè)上下文

上下文必須具有 DbContextOptions 或 DbContextOptions<T> 的構(gòu)造函數(shù),建議使用泛型形式。

構(gòu)造函數(shù)示例:

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

具有此構(gòu)造函數(shù),則可以通過(guò)外界注入配置,例如

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

如果你不使用注入(Microsoft.Extensions.DependencyInjection)或者第三方 ioc 工具,那么無(wú)法使用上面這種形式。

不過(guò)可以自己 new,自己傳遞配置對(duì)象,

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

 到此這篇關(guān)于.NET Core配置連接字符串和獲取數(shù)據(jù)庫(kù)上下文實(shí)例的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

最新評(píng)論

瑞昌市| 尉犁县| 苍山县| 九龙县| 长乐市| 始兴县| 东安县| 阿克苏市| 烟台市| 武陟县| 新疆| 缙云县| 孝昌县| 奎屯市| 灵武市| 卢湾区| 张北县| 本溪| 二连浩特市| 江达县| 黑山县| 天祝| 阿克陶县| 德江县| 巨野县| 德庆县| 崇信县| 花莲市| 隆回县| 合川市| 吉林省| 荆州市| 临沂市| 科技| 信阳市| 云南省| 南澳县| 静乐县| 哈密市| 舟山市| 连平县|