中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

用.NET生成數據庫的方法步驟

發布時間:2021-10-09 16:45:19 來源:億速云 閱讀:180 作者:iii 欄目:數據庫

本篇內容介紹了“用.NET生成數據庫的方法步驟”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

用.NET生成數據庫的方法步驟

開篇語

本文主要是回顧下從項目創建到生成數據到數據庫(代碼優先)的全部過程。采用EFCore作為ORM框架。

本次示例環境:vs2019、net5、mysql

創建項目

本次事例代碼是用過vs2019創建的ASP.NET Core Web API項目

可以通過可視化界面創建或者通過命令行創建

dotnet new webapi -o Net5ByDocker

創建實體類

安裝連接MySQL數據庫組件

<PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="5.0.0" />     <PackageReference Include="Pomelo.EntityFrameworkCore.MySql.Json.Newtonsoft" Version="5.0.0" />

增加實體類

[Table("user")]   public class User   {       public User()       {           Id = Guid.NewGuid().ToString();       }        public User(string account, string password, string creater) : this()       {           Account = account;           Password = password;           Deleted = false;           SetCreater(creater);       }        [Key]       [Comment("主鍵")]       [StringLength(36)]       [Required]       public string Id { get; private set; }        [Comment("帳號")]       [StringLength(36)]       [Required]       public string Account { get; private set; }        [Comment("密碼")]       [StringLength(36)]       [Required]       public string Password { get; private set; }        [Comment("余額")]       [Column(TypeName = "decimal(18, 2)")]       [Required]       public decimal Money { get; set; }        [Comment("是否刪除")]       [Column(TypeName = "tinyint(1)")]       [Required]       public bool Deleted { get; private set; }        [Comment("創建人")]       [StringLength(20)]       [Required]       public string Creater { get; private set; }        [Comment("創建時間")]       [Required]       public DateTime CreateTime { get; private set; }        [Comment("修改人")]       [StringLength(20)]       [Required]       public string Modifyer { get; private set; }        [Comment("修改時間")]       [Required]       public DateTime ModifyTime { get; private set; }        public void SetCreater(string name)       {           Creater = name;           CreateTime = DateTime.Now;           SetModifyer(name);       }        public void SetModifyer(string name)       {           Modifyer = name;           ModifyTime = DateTime.Now;       }   }

這種只是增加實體類類型的一種方式,可能這種看著比較亂,還可以通過OnModelCreating實現,詳情看參考文檔

增加數據庫上下文OpenDbContext

public class OpenDbContext : DbContext     {         public OpenDbContext(DbContextOptions<OpenDbContext> options)             : base(options)         {         }          public DbSet<User> Users { get; set; }     }

Startup注入連接數據庫操作

var connection = Configuration["DbConfig:Mysql:ConnectionString"];             var migrationsAssembly = IntrospectionExtensions.GetTypeInfo(typeof(Startup)).Assembly.GetName().Name;             services.AddDbContext<OpenDbContext>(option => option.UseMySql(connection, ServerVersion.AutoDetect(connection), x =>             {                 x.UseNewtonsoftJson();                 x.MigrationsAssembly(migrationsAssembly);             }));

生成遷移文件

引用組件

<PackageReference Include="Microsoft.EntityFrameworkCore.Design" Version="5.0.5"> <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.5">

遷移命令

add-migration Init

結果

用.NET生成數據庫的方法步驟

image.png

要看下生成的遷移文件是否是自己預期的那樣子,也可以在這一步就生成數據庫,命令:Update-Database

數據種子

增加OpenDbSend類,添加數據種子

public class OpenDbSend  {      /// <summary>      /// 生成數據庫以及數據種子      /// </summary>      /// <param name="dbContext">數據庫上下文</param>      /// <param name="loggerFactory">日志</param>      /// <param name="retry">重試次數</param>      /// <returns></returns>      public static async Task SeedAsync(OpenDbContext dbContext,          ILoggerFactory loggerFactory,          int? retry = 0)      {          int retryForAvailability = retry.Value;          try          {              dbContext.Database.Migrate();//如果當前數據庫不存在按照當前 model 創建,如果存在則將數據庫調整到和當前 model 匹配              await InitializeAsync(dbContext).ConfigureAwait(false);               //if (dbContext.Database.EnsureCreated())//如果當前數據庫不存在按照當前 model創建,如果存在則不管了。              //  await InitializeAsync(dbContext).ConfigureAwait(false);          }          catch (Exception ex)          {              if (retryForAvailability < 3)              {                  retryForAvailability++;                  var log = loggerFactory.CreateLogger<OpenDbSend>();                  log.LogError(ex.Message);                  await SeedAsync(dbContext, loggerFactory, retryForAvailability).ConfigureAwait(false);              }          }      }       /// <summary>      /// 初始化數據      /// </summary>      /// <param name="context"></param>      /// <returns></returns>      public static async Task InitializeAsync(OpenDbContext context)      {          if (!context.Set<User>().Any())          {              await context.Set<User>().AddAsync(new User("azrng", "123456", "azrng")).ConfigureAwait(false);              await context.Set<User>().AddAsync(new User("張三", "123456", "azrng")).ConfigureAwait(false);          }          await context.SaveChangesAsync().ConfigureAwait(false);      }  }

設置項目啟動時候調用

public static async Task Main(string[] args)        {            var host = CreateHostBuilder(args).Build();            using (var scope = host.Services.CreateScope())            {                var services = scope.ServiceProvider;                var loggerFactory = services.GetRequiredService<ILoggerFactory>();                var _logger = loggerFactory.CreateLogger<Program>();                try                {                    var openContext = services.GetRequiredService<OpenDbContext>();                    await OpenDbSend.SeedAsync(openContext, loggerFactory).ConfigureAwait(false);                }                catch (Exception ex)                {                    _logger.LogError(ex, $"項目啟動出錯  {ex.Message}");                }            }             await host.RunAsync().ConfigureAwait(false);        }

生成數據庫

啟動項目,自動生成數據庫

用.NET生成數據庫的方法步驟

image.png

表結構如下

用.NET生成數據庫的方法步驟

image.png

如果后期數據庫字段或者結構有變動,可以再次生成遷移文件然后生成數據庫

查詢數據

/// <summary> /// 用戶接口 /// </summary> public interface IUserService {     string GetName();      /// <summary>     /// 查詢用戶信息     /// </summary>     /// <param name="account"></param>     /// <returns></returns>     Task<User> GetDetailsAsync(string account); }  /// <summary> /// 用戶實現 /// </summary> public class UserService : IUserService {     private readonly OpenDbContext _dbContext;      public UserService(OpenDbContext dbContext)     {         _dbContext = dbContext;     }      public string GetName()     {         return "AZRNG";     }      ///<inheritdoc cref="IUserService.GetDetailsAsync(string)"/>     public async Task<User> GetDetailsAsync(string account)     {         return await _dbContext.Set<User>().FirstOrDefaultAsync(t => t.Account == account).ConfigureAwait(false);     } }

一般更推薦建立指定的返回Model類,然后只查詢需要的內容,不直接返回實體類

控制器方法

/// <summary> /// 查詢用戶詳情 /// </summary> /// <param name="account"></param> /// <returns></returns> [HttpGet] public async Task<ActionResult<User>> GetDetailsAsync(string account) {     return await _userService.GetDetailsAsync(account).ConfigureAwait(false); }

查詢結果

{   "id": "e8976d0a-6ee9-4e2e-b8d8-1fe6e85b727b",   "account": "azrng",   "password": "123456",   "money": 0,   "deleted": false,   "creater": "azrng",   "createTime": "2021-05-09T15:48:45.730302",   "modifyer": "azrng",   "modifyTime": "2021-05-09T15:48:45.730425" }

“用.NET生成數據庫的方法步驟”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

县级市| 库伦旗| 德化县| 彭阳县| 腾冲县| 东乌珠穆沁旗| 丹东市| 新巴尔虎左旗| 长海县| 高青县| 昭通市| 兴城市| 济阳县| 枝江市| 云龙县| 德令哈市| 瓦房店市| 祁门县| 建宁县| 鹤壁市| 宣城市| 临沂市| 枣庄市| 张北县| 宕昌县| 兴义市| 黄冈市| 家居| 仲巴县| 抚州市| 海丰县| 竹山县| 五常市| 临沧市| 喀喇沁旗| 德江县| 林西县| 旺苍县| 龙胜| 长泰县| 汤阴县|