ASP.NET Zero全方位介紹

一、ASP.NET Zero 多表關聯

ASP.NET Zero是一個基於ASP.NET Core的跨平台Web應用程序框架。在ASP.NET Zero中,我們可以非常方便地完成多表之間的關聯操作。在實現多表之間的關聯時,我們需要使用Entity Framework Core來設置各種實體之間的關係。

    public class Order : FullAuditedAggregateRoot
    {
        [ForeignKey("Customer")]
        public long CustomerId { get; set; }

        public virtual Customer Customer { get; set; }

        [ForeignKey("Salesperson")]
        public long SalespersonId { get; set; }

        public virtual Salesperson Salesperson { get; set; }
    }

    public class Customer : FullAuditedAggregateRoot
    {
        public string Name { get; set; }

        public virtual ICollection Orders { get; set; }
    }

    public class Salesperson : FullAuditedAggregateRoot
    {
        public string Name { get; set; }

        public virtual ICollection Orders { get; set; }
    }

在上述代碼示例中,我們定義了三個實體,分別為Order、Customer和Salesperson。其中Order實體擁有一個外鍵關聯到Customer實體和Salesperson實體。在Customer和Salesperson實體中,分別聲明了與Order實體的導航屬性。這樣就完成了多表之間的關聯配置。

二、ASP.NET Zero 10.4.0

ASP.NET Zero的10.4.0版本在原來的基礎上增加了一些新的特性。其中比較重要的特性包括跨域請求、實現多語言支持以及實現分散式事務。

跨域請求是指在一個域名下的頁面向另一個域名的頁面發送請求的行為。在ASP.NET Zero中,我們可以使用CORS(跨域資源共享)來實現跨域請求。實現CORS的方式比較簡單,只需在startup.cs文件中的ConfigureServices方法中添加以下代碼:

    services.AddCors(options =>
    {
        options.AddPolicy("AllowAll",
            builder => builder.AllowAnyOrigin().AllowAnyMethod().AllowAnyHeader());
    });

    app.UseCors("AllowAll");

實現多語言支持是指在應用程序中可以動態更改用戶的語言偏好設置。在ASP.NET Zero中,我們可以使用AspNetZeroLocalizationConfigurer來實現多語言支持。具體實現方式如下:

    public override void ConfigureLocalizationService(ILocalizationServiceConfiguration localizationServiceConfiguration)
    {
        localizationServiceConfiguration.DefaultResourceType = typeof(MyAppResource);
        localizationServiceConfiguration.Languages.Add(new LanguageInfo("en", "English", "famfamfam-flag-gb", isDefault: true));
        localizationServiceConfiguration.Languages.Add(new LanguageInfo("zh-Hans", "簡體中文", "famfamfam-flag-cn"));
    }

實現分散式事務是指在分散式環境下多個資料庫之間進行數據交互時,可以保證數據的一致性。在ASP.NET Zero中,我們可以使用ABP框架自帶的UnitOfWork來實現分散式事務。在代碼中使用工作單元,如果拋出異常,則會自動回滾事務。

    public class OrderAppService : MyProjectAppServiceBase, IOrderAppService
    {
        private readonly IRepository _orderRepository;
        private readonly IRepository _customerRepository;
        private readonly IRepository _salespersonRepository;

        public OrderAppService(
            IRepository orderRepository,
            IRepository customerRepository,
            IRepository salespersonRepository)
        {
            _orderRepository = orderRepository;
            _customerRepository = customerRepository;
            _salespersonRepository = salespersonRepository;
        }

        public async Task CreateOrder(CreateOrderInput input)
        {
            using (var uow = UnitOfWorkManager.Begin())
            {
                try
                {
                    // 創建訂單
                    var order = new Order
                    {
                        CustomerId = input.CustomerId,
                        SalespersonId = input.SalespersonId,
                        CreationTime = Clock.Now
                    };
                    await _orderRepository.InsertAsync(order);

                    // 修改客戶信息
                    var customer = await _customerRepository.GetAsync(input.CustomerId);
                    customer.Name = input.CustomerName;
                    await _customerRepository.UpdateAsync(customer);

                    // 修改銷售員信息
                    var salesperson = await _salespersonRepository.GetAsync(input.SalespersonId);
                    salesperson.Name = input.SalespersonName;
                    await _salespersonRepository.UpdateAsync(salesperson);

                    await uow.CompleteAsync();
                }
                catch (Exception)
                {
                    await uow.RollbackAsync();
                    throw;
                }
            }
        }
    }

三、ASP.NET Zero連接兩個資料庫

ASP.NET Zero可以輕鬆地連接多個資料庫。在連接多個資料庫時,我們可以配置不同的DbContext。

我們可以使用ASP.NET Zero提供的ABP框架自帶的DbContext來實現和使用不同的資料庫。在配置多個DbContext時,需要在startup.cs文件中的ConfigureServices方法中添加以下代碼:

    services.AddAbpDbContext(options =>
    {
        options.DbContextOptions.UseSqlServer(connectionStrings.Default);
    });

    services.AddAbpDbContext(options =>
    {
        options.DbContextOptions.UseSqlServer(connectionStrings.Order);
    });

具體代碼實現示例

    public class OrderDbContext : AbpDbContext
    {
        public OrderDbContext(DbContextOptions options) : base(options)
        {
        }

        public DbSet Orders { get; set; }

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

            modelBuilder.ConfigureOrderStore();
        }
    }

    public static class OrderDbContextModelCreatingExtensions
    {
        public static void ConfigureOrderStore(this ModelBuilder builder)
        {
            builder.Entity(b =>
            {
                b.ToTable("Orders");
                b.ConfigureByConvention();
            });
        }
    }

在上述代碼示例中,我們自定義了一個名為OrderDbContext的DbContext,並在其中定義了一個DbSet。我們還在ConfigureServices中將DbContext的配置細節添加了進去。

我們還可以在代碼中使用連接另一個資料庫來查詢數據:

        public async Task<IList> GetOrdersFromOtherDbContext(long customerId)
        {
            using (var orderDbContext = _serviceProvider.GetService())
            {
                return await orderDbContext.Orders.FromSqlRaw("SELECT * FROM Orders WHERE CustomerId = {0}", customerId).ToListAsync();
            }
        }

在上述代碼示例中,我們在代碼中使用了OrderDbContext來連接另一個資料庫,並使用FromSqlRaw來執行查詢,並得到了查詢結果。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/193528.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-01 15:02
下一篇 2024-12-01 15:02

相關推薦

  • 解決.net 6.0運行閃退的方法

    如果你正在使用.net 6.0開發應用程序,可能會遇到程序閃退的情況。這篇文章將從多個方面為你解決這個問題。 一、代碼問題 代碼問題是導致.net 6.0程序閃退的主要原因之一。首…

    編程 2025-04-29
  • MyBatis.NET

    MyBatis.NET是一個優秀的.NET ORM框架,它將對象映射成為資料庫中的記錄,不需要編寫SQL語句,並具有良好的性能和靈活性。 一、簡介 MyBatis.NET集成了面向…

    編程 2025-04-23
  • system.net.webexception異常詳解

    一、webException的概念 System.Net.WebException類表示的是發生與http協議相關的錯誤時.NET Framework的異常。在.NET編程中,we…

    編程 2025-04-23
  • Windows10無法安裝.NET Framework 3.5 & 2.0 & 3.0

    在Windows10中安裝.NET Framework 3.5、2.0和3.0時,您可能會遇到一些問題,例如無法安裝或安裝過程中出現錯誤。以下內容將從幾個方面來詳細闡述這些問題。 …

    編程 2025-04-23
  • ZZZJST.NET:一個全面的編程學習平台

    一、簡介 www.zzzjst.net是一個全能編程開發工程師的學習平台。它提供高質量的編程課程,為技術人員和程序員開展技術能力的提升提供了不可替代的資源。 該網站以前端技術、後端…

    編程 2025-04-23
  • .NET框架:微軟推出的跨平台編程框架

    一、介紹 Microsoft .NET Framework(簡稱.NET)是由微軟公司一個跨平台的開發框架,它支持多種操作系統和開發語言,為創建面向 Windows 和 Web 的…

    編程 2025-04-22
  • Zero Copy技術詳解

    一、概述 Zero Copy技術是一種高效數據傳輸的方式,它的本質是利用操作系統的內存映射機制來避免傳統的用戶態和內核態之間的數據拷貝,從而提高數據傳輸的效率和可靠性。 二、理論基…

    編程 2025-04-12
  • Ubuntu安裝Net-tools詳解

    一、Net-tools介紹 Net-tools是一個Linux下常用的網路工具集,包含了一系列用來管理和診斷網路的應用程序,如ifconfig、route、arp、netstat等…

    編程 2025-04-02
  • Java.net詳解

    Java.net是Java平台提供的用於網路編程的API集合。它提供了在Java應用程序中實現網路連接和通信所需的基本組件和類。Java.net包含了一系列類,如Socket、Se…

    編程 2025-02-25
  • .NET 5.0詳解

    一、新特性 .NET 5.0是微軟推出的一個全新版本的.NET Framework,該版本在各個方面都有著令人驚喜的增強和改進。本章我們將討論.NET 5.0的新功能和特性,讓您對…

    編程 2025-02-17

發表回復

登錄後才能評論