<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      ASP.NET Core EFCore 屬性配置與DbContext 詳解

      本文將深入探討 ASP.NET Core 中 EFCore 的實體屬性配置方法及 DbContext 的核心用法,幫助開發者高效管理數據模型與數據庫交互。


      一、屬性配置

      實體屬性配置是定義模型與數據庫映射的核心,EFCore 提供兩種方式:數據注解和 Fluent API

      1. 數據注解(Data Annotations)

      通過特性(Attributes)直接在實體類上聲明配置,適合簡單場景。

      public class Product{    
      [Key] // 主鍵
      public int Id { get; set; }
      [Required, MaxLength(100)] // 非空且最大長度100
      public string Name { get; set; }
      [ForeignKey("CategoryId")] // 外鍵
      public int CategoryId { get; set; }
      public Category Category { get; set; }}

      常用注解:

      • [Key]:主鍵

      • [Required]:非空約束

      • [MaxLength(length)]:最大長度

      • [ForeignKey]:外鍵關系

      • [Table("TableName")]:自定義表名

      2. Fluent API

      在 DbContext 的 OnModelCreating 方法中配置,提供更靈活的方式。

      protected override void OnModelCreating(ModelBuilder modelBuilder){   
      modelBuilder.Entity<Product>(entity => {
      entity.HasKey(p => p.Id); // 主鍵
      entity.Property(p => p.Name)
      .IsRequired()
      .HasMaxLength(100);
      entity.HasOne(p => p.Category) // 一對一/多關系
      .WithMany(c => c.Products)
      .HasForeignKey(p => p.CategoryId);
      });}

      常用配置方法:

      • HasKey():定義主鍵

      • Property().IsRequired():非空約束

      • HasIndex():創建索引

      • HasOne().WithMany():配置導航關系

      優勢:

      • 集中管理配置,避免污染實體類。

      • 支持復雜配置(如復合主鍵、繼承映射)。


      二、DbContext 詳解

      DbContext 是 EFCore 的核心,負責數據庫連接、查詢、事務管理等。

      1. 定義 DbContext

      派生類需繼承 DbContext,并暴露 DbSet<T> 屬性。

      public class AppDbContext : DbContext{    

      public DbSet<Product> Products { get; set; }
      public DbSet<Category> Categories { get; set; } protected override void OnConfiguring(DbContextOptionsBuilder options)
      => options.UseSqlServer("Your_Connection_String"); protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
        // Fluent API 配置
        }
      }
      2. 生命周期與依賴注入

      在 ASP.NET Core 中,通過依賴注入管理上下文生命周期:

      // Startup.cs
      services.AddDbContext<AppDbContext>(options =>
      options.UseSqlServer(Configuration.GetConnectionString("Default")));
      • 作用域(Scoped):默認選項,每個請求一個實例,確保線程安全。

      • 避免長時間持有 DbContext,以防內存泄漏。

      3. 數據操作
      • 查詢

      var products = await _context.Products.Where(p => p.Price > 50).ToListAsync();
      • 保存變更

      _context.Products.Add(newProduct);
      await _context.SaveChangesAsync();

      關鍵方法:

      • Add()Remove():跟蹤實體狀態

      • SaveChangesAsync():提交事務

      4. 性能優化
      • AsNoTracking():禁用變更跟蹤,提升查詢速度。

      • DbContext 池:復用上下文實例,減少開銷。

      services.AddDbContextPool<AppDbContext>(...);

      三、高級配置

      1. 多對多關系

      使用 Fluent API 配置中間表:

      modelBuilder.Entity<Post>()    
      .HasMany(p => p.Tags)
      .WithMany(t => t.Posts)
      .UsingEntity(j => j.ToTable("PostTags"));
      2. 繼承映射

      TPH(Table-Per-Hierarchy)模式:

      modelBuilder.Entity<Blog>()    
      .HasDiscriminator<string>("BlogType")
      .HasValue<Blog>("Standard")
      .HasValue<RssBlog>("RSS");
      3. 全局過濾器

      自動應用查詢條件(如軟刪除):

      modelBuilder.Entity<Post>().HasQueryFilter(p => !p.IsDeleted);

      四、最佳實踐與常見問題

      1. 選擇數據注解還是 Fluent API?

        • 簡單配置用數據注解,復雜需求用 Fluent API。

      2. DbContext 線程安全

        • 確保每個請求使用獨立實例,避免并發問題。

      3. 遷移(Migrations)

        • 通過 dotnet ef migrations add 生成數據庫架構變更。

      4. 性能陷阱

        • 避免在循環中頻繁調用 SaveChanges()

        • 使用 Include() 預加載關聯數據,減少 N+1 查詢。


      結語

      掌握 EFCore 的屬性配置與 DbContext 管理,能夠顯著提升數據層開發效率。合理選擇配置方式,結合依賴注入和性能優化技巧,可構建高效穩健的 ASP.NET Core 應用。

      posted @ 2025-05-17 08:21  碼農剛子  閱讀(698)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲精品国产一区二区在线观看| 另类 专区 欧美 制服| 风间由美性色一区二区三区 | 女同性恋一区二区三区视频| 亚洲的天堂在线中文字幕| 韩国午夜理伦三级| 无码AV中文字幕久久专区| 无套内谢少妇毛片aaaa片免费| 久久这里有精品国产电影网| 国产麻豆9l精品三级站| 免费人妻av无码专区| 亚洲成人精品综合在线| 亚洲精品久久国产高清| 国产老熟女伦老熟妇露脸| 国产亚洲亚洲国产一二区| 色偷偷女人的天堂亚洲网| 亚洲鸥美日韩精品久久| 欧洲国产成人久久精品综合| av无码精品一区二区乱子| 影音先锋大黄瓜视频| 激情亚洲专区一区二区三区| 久久综合国产色美利坚| 91孕妇精品一区二区三区| 亚洲女人的天堂在线观看| 天天摸天天碰天天添| 成人自拍短视频午夜福利| 精品久久人人做爽综合| 午夜精品一区二区三区免费视频| 国产片一区二区三区视频| 国内不卡不区二区三区| 老湿机69福利区无码| 亚洲女女女同性video| 日韩精品国产中文字幕| 午夜福利视频| av在线播放日韩亚洲欧| 亚洲欧美中文字幕日韩一区二区 | 麻花传媒在线观看免费| 欧洲码亚洲码的区别入口| 91热在线精品国产一区| 日韩成人无码影院| 视频一区视频二区卡通动漫|