欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

.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à)值,需要的朋友們下面隨著小編來一起學(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,用來配置注入和獲取上下文。

    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();

無簽名上下文 OnConfigure 配置

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

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è)無簽名構(gòu)造函數(shù)時(shí),外界使用此構(gòu)造函數(shù)直接實(shí)例化上下文。

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

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

OnConfiguring會(huì)在無注入、也沒有使用有簽名構(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ù),則可以通過外界注入配置,例如

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

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

不過可以自己 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)文章

  • .net任務(wù)調(diào)度框架FluentScheduler簡(jiǎn)介

    .net任務(wù)調(diào)度框架FluentScheduler簡(jiǎn)介

    這篇文章介紹了.net任務(wù)調(diào)度框架FluentScheduler,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-07-07
  • C# javaScript函數(shù)的相互調(diào)用

    C# javaScript函數(shù)的相互調(diào)用

    如何在JavaScript訪問C#函數(shù),如何在C#中訪問JavaScript的已有變量等實(shí)現(xiàn)方法
    2008-12-12
  • .NET/ASP.NET Routing路由(深入解析路由系統(tǒng)架構(gòu)原理)

    .NET/ASP.NET Routing路由(深入解析路由系統(tǒng)架構(gòu)原理)

    這篇文章主要介紹了.NET/ASP.NET Routing路由(深入解析路由系統(tǒng)架構(gòu)原理),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-07-07
  • 在VS2009中集成自動(dòng)上傳nuget包到服務(wù)器的解決方案

    在VS2009中集成自動(dòng)上傳nuget包到服務(wù)器的解決方案

    這篇文章主要介紹了在VS2009中集成自動(dòng)上傳nuget包到服務(wù)器的解決方案,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • .Net語(yǔ)言Smobiler開發(fā)之如何在手機(jī)上實(shí)現(xiàn)表單設(shè)計(jì)

    .Net語(yǔ)言Smobiler開發(fā)之如何在手機(jī)上實(shí)現(xiàn)表單設(shè)計(jì)

    這篇文章主要為大家詳細(xì)介紹了.Net語(yǔ)言APP開發(fā)平臺(tái),如何在手機(jī)上實(shí)現(xiàn)表單設(shè)計(jì)(Smobiler),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • 利用.net代碼實(shí)現(xiàn)發(fā)送郵件

    利用.net代碼實(shí)現(xiàn)發(fā)送郵件

    這篇文章主要為大家詳細(xì)介紹了利用.net代碼實(shí)現(xiàn)發(fā)送郵件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • asp.net獲取網(wǎng)站絕對(duì)路徑示例

    asp.net獲取網(wǎng)站絕對(duì)路徑示例

    在編寫 ASP.NET 應(yīng)用程序的時(shí)候,有時(shí)為了更好地進(jìn)行控制靜態(tài)文件的路徑,如在模板頁(yè)或者用戶控件中設(shè)置js或者css文件的路徑等,采用絕對(duì)路徑是難免的。下面就是幾種獲取絕對(duì)路徑的幾種方法
    2014-02-02
  • 巧用ASP.NET Cookie

    巧用ASP.NET Cookie

    這篇文章主要介紹了如何巧用ASP.NET Cookie,Cookie是屬于ASP.NET中的七大內(nèi)置對(duì)象中的一種,希望大家可以認(rèn)真學(xué)習(xí),本文完整的對(duì)cookie機(jī)制進(jìn)行講解,感興趣的小伙伴們可以參考一下
    2016-02-02
  • Entity Framework中執(zhí)行sql語(yǔ)句

    Entity Framework中執(zhí)行sql語(yǔ)句

    這篇文章介紹了Entity Framework中執(zhí)行sql語(yǔ)句的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-03-03
  • ASP.NET Core文件壓縮常見使用誤區(qū)(最佳實(shí)踐)

    ASP.NET Core文件壓縮常見使用誤區(qū)(最佳實(shí)踐)

    本文給大家分享ASP.NET Core文件壓縮常見的三種誤區(qū),就每種誤區(qū)給大家講解的非常詳細(xì),是項(xiàng)目實(shí)踐的最佳紀(jì)錄,對(duì)ASP.NET Core文件壓縮相關(guān)知識(shí)感興趣的朋友一起看看吧
    2021-05-05

最新評(píng)論