国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Wpf 使用 Prism 實戰(zhàn)開發(fā)Day11

這篇具有很好參考價值的文章主要介紹了Wpf 使用 Prism 實戰(zhàn)開發(fā)Day11。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

倉儲(Repository)/工作單元(Unit Of Work)模式

  • ?倉儲(rep):倉儲接口定義了對實體類訪問數(shù)據(jù)庫及操作的方法。它統(tǒng)一管理數(shù)據(jù)訪問的邏輯,并與業(yè)務邏輯層進行解耦。 簡單的理解就是對訪問數(shù)據(jù)庫的一層接口封裝。
  • 工作單元(uow):用來保證我們處理業(yè)務邏輯的,穩(wěn)定性,完整性。防止在業(yè)務操作過程中,涉及對數(shù)據(jù)庫多張表進行了增刪改查(CURD)的時候,部分成功,部分失敗。類似數(shù)據(jù)庫中開的事務。

一.實現(xiàn)基礎的倉儲接口

1.新建一個 Repository (倉儲) 文件夾,用來存放我們定義各個實體類對數(shù)據(jù)庫操作的倉儲。也就是對各個實體(表)進行增刪改查的定義及實現(xiàn),以及更高級的操作,例,分頁,工作單元,事務,等等。

? ? ?1. 創(chuàng)建? 待辦事項倉儲接口類?IToDoRepository? 并且定義了(ToDo)實體對數(shù)據(jù)庫CURD 的方法?

    public interface IToDoRepository
    {
        Task<bool> Add(ToDo toDo);
        bool Delete(ToDo toDo);
        bool Update(ToDo toDo);
        Task<ToDo> GetToDo();
    }

? ? ? 2. 創(chuàng)建待辦事項倉儲的?實現(xiàn)類?ToDoRepository。該類繼承自 IToDoRepository 倉儲接口,并且需要實現(xiàn)父類所有定義的方法。

public class ToDoRepository : IToDoRepository
{
    private readonly MyToDoContext doContext;

    public ToDoRepository(MyToDoContext doContext)
    {
        this.doContext = doContext;
    }
    /// <summary>
    /// 增加
    /// </summary>
    /// <param name="toDo"></param>
    /// <returns></returns>
    public async Task<bool> Add(ToDo toDo)
    {
         await doContext.ToDo.AddAsync(toDo);
        return await doContext.SaveChangesAsync()>0;
    }

    /// <summary>
    /// 刪除
    /// </summary>
    /// <param name="toDo"></param>
    /// <returns></returns>
    public  bool Delete(ToDo toDo)
    {
        doContext.ToDo.Remove(toDo);    
        return  doContext.SaveChanges()>0;
    }

    /// <summary>
    ///  更新
    /// </summary>
    /// <param name="toDo"></param>
    /// <returns></returns>
    public bool Update(ToDo toDo)
    {
        doContext.ToDo.Update(new ToDo
        {
            Id = toDo.Id,
            Title=toDo.Title,
            Content=toDo.Content,
        });
        return  doContext.SaveChanges()>0;
    }
    /// <summary>
    /// 查詢
    /// </summary>
    /// <returns></returns>
    public async Task<ToDo> GetToDo()
    {
       var toDo=await doContext.ToDo.FirstOrDefaultAsync();
        return toDo;
    }
}
  1. ?以上就是定義和實現(xiàn)的某個實體類倉儲的基礎寫法。并且接口命名規(guī)范要用大寫字母 I開頭,實現(xiàn)類就去掉 I 字母。例如:定義倉儲接口類: IToDoRepository, 倉儲接口實現(xiàn)類:ToDoRepository
  2. 執(zhí)行完操作后,要保存到數(shù)據(jù)庫,需要調用?SaveChangesAsync。異步方法需要加Async,同步方法則去掉Async.其他的方法使用異步或同步也是同樣的道理。

?二.如何使用倉儲

? ? 1. 在 Program.cs 中,進行注入

builder.Services.AddScoped<IToDoRepository,ToDoRepository>();

Wpf 使用 Prism 實戰(zhàn)開發(fā)Day11,WPF入門,數(shù)據(jù)庫,c#

? ? ?2. 在控制器構造函數(shù)中實例化定義的倉儲接口,并且通過 toDoRepository 實例去調用到定義的方法。

namespace MyToDo.Api.Controllers
{
    [ApiController]
    [Route("[controller]/[action]")]
    public class WeatherForecastController : ControllerBase
    {
        private readonly IToDoRepository toDoRepository;

        public WeatherForecastController(IToDoRepository toDoRepository)
        {
            this.toDoRepository = toDoRepository;
        }

        [HttpGet(Name = "GetToDo")]
        public async Task<ToDo> Get()
        {
           var  retsult= await toDoRepository.GetToDo();
            return retsult;
        }
        [HttpPost(Name = "Add")]
        public async Task<bool> AddAsync(ToDo toDo)
        {
            var retsult = await toDoRepository.Add(toDo);
            return retsult;
        }
        [HttpDelete(Name = "Delete")]
        public bool Deletes(ToDo toDo)
        {
            var retsult =  toDoRepository.Delete(toDo);
            return retsult;
        }
        [HttpPost(Name = "Update")]
        public bool UpdateAsync(ToDo toDo)
        {
            var retsult = toDoRepository.Update(toDo);
            return retsult;
        }
    }
}

Wpf 使用 Prism 實戰(zhàn)開發(fā)Day11,WPF入門,數(shù)據(jù)庫,c#

  1. 測試接口的時候,點擊Try in out,再執(zhí)行 Execute.如果沒有問題,就能看到查詢返回的數(shù)據(jù)了。
  2. 注意:控制器里面的添加的路由,已經(jīng)改成完整的路由了。由控制器/方法組合而成的唯一路由。例如:??[Route("[controller]/[action]")]
  3. 以上實現(xiàn)了 ToDo 實體對數(shù)據(jù)庫基礎的增刪改查,雖然實際應用中還遠遠達不到使用需求,這個只是為了能去理解倉儲模式的建立和使用。所有倉儲底層操作數(shù)據(jù)庫都大同小異。如果有別人寫好的倉儲,各性能各方面都相當ok,或者有其他的更主流的 orm框架,我們拿來用即可。避免重復造輪子,除非能造出更好的輪子了。

Wpf 使用 Prism 實戰(zhàn)開發(fā)Day11,WPF入門,數(shù)據(jù)庫,c#


三.工作單元 (Unit Of Work)

  • 自個實現(xiàn)的倉儲太簡單,在實際應用中,如果涉及多張表操作,暫時無法保證數(shù)據(jù)的一致性??赡苓€需要花很多時間去修改代碼達到使用需求。所以在 github 中已經(jīng)有更好的實現(xiàn)方案 UnitOfWork,也包含了倉儲接口的定義,直接拿來用即可。
  • 使用 uow 好處,多個倉儲之間可以共享上下文(DbContext)以及保證操作數(shù)據(jù)一致性和完整性。

?1.? 下載 Unit Of Work 源碼

Wpf 使用 Prism 實戰(zhàn)開發(fā)Day11,WPF入門,數(shù)據(jù)庫,c#

?2.在MyToDo.Api 項目中,創(chuàng)建一個?UnitOfWork 文件夾,并且把以下代碼復制過來

Wpf 使用 Prism 實戰(zhàn)開發(fā)Day11,WPF入門,數(shù)據(jù)庫,c#

?3. 創(chuàng)建一個類庫項目去存放,共用的代碼

Wpf 使用 Prism 實戰(zhàn)開發(fā)Day11,WPF入門,數(shù)據(jù)庫,c#

4.選擇 類庫項目,點下一步,并且項目名稱定義成 :MyToDo.Shared

Wpf 使用 Prism 實戰(zhàn)開發(fā)Day11,WPF入門,數(shù)據(jù)庫,c#

5.把共用的代碼,復制到 MyToDo.Shared 里面去

Wpf 使用 Prism 實戰(zhàn)開發(fā)Day11,WPF入門,數(shù)據(jù)庫,c#

6.在MyToDo.Api 項目中,右鍵=》添加=》項目引用

Wpf 使用 Prism 實戰(zhàn)開發(fā)Day11,WPF入門,數(shù)據(jù)庫,c#

7.勾選 MyToDo.Shared。表示在 MyToDo.Api引用該項目,點擊確定。

Wpf 使用 Prism 實戰(zhàn)開發(fā)Day11,WPF入門,數(shù)據(jù)庫,c#

8.最后,還需要在MyToDo.Api 項目的NuGet 中下載安裝這個包

Microsoft.EntityFrameworkCore.AutoHistory?

Wpf 使用 Prism 實戰(zhàn)開發(fā)Day11,WPF入門,數(shù)據(jù)庫,c#

  • 復制過來的代碼,命名空間要更改。如果有其他報錯,例如:報某個方法訪問性不一至,找到那個方法。把訪問修飾符?internal 改成public 就可以了。
  • ?UnitOfWork 文件夾的源碼以及?MyToDo.Shared 等2個公共文件夾里面的源碼,自行去github下載了

  • 目前,整個完整的項目結構,如下:

Wpf 使用 Prism 實戰(zhàn)開發(fā)Day11,WPF入門,數(shù)據(jù)庫,c#


四.如何使用工作單元 (Unit Of Work)

1. 先添加不同倉儲的實現(xiàn),例如,待辦事項倉儲?(ToDoRepository)?

    public class ToDoRepository : Repository<ToDo>, IRepository<ToDo>
    {
        public ToDoRepository(MyToDoContext dbContext) : base(dbContext)
        {

        }
    }

這個就是使用別人提供的 Unit Of Work中已寫好的倉儲接口,然后自己自定義倉儲去繼承并實現(xiàn)它的一個標準寫法。這樣就能調用到別人集成好的方法。集成到自己的業(yè)務邏輯中去。

Wpf 使用 Prism 實戰(zhàn)開發(fā)Day11,WPF入門,數(shù)據(jù)庫,c#


2.在Program.cs 中進行依賴注入

builder.Services.AddDbContext<MyToDoContext>(option =>
{
    //獲取數(shù)據(jù)庫連接
    var connectionString = builder.Configuration.GetConnectionString("ToDoConnection");
    //使用sqlite
    option.UseSqlite(connectionString);
}).AddUnitOfWork<MyToDoContext>() //注入工作單元
.AddCustomRepository<ToDo,ToDoRepository>() //注入倉儲
.AddCustomRepository<Memo, MemoRepository>()
.AddCustomRepository<User, UserRepository>();

Wpf 使用 Prism 實戰(zhàn)開發(fā)Day11,WPF入門,數(shù)據(jù)庫,c#


?3.使用方式

namespace MyToDo.Api.Controllers
{
    [ApiController]
    [Route("[controller]/[action]")]
    public class WeatherForecastController : ControllerBase
    {
        private readonly IUnitOfWork unitOfWork;

        public WeatherForecastController(IUnitOfWork unitOfWork)
        {
            this.unitOfWork = unitOfWork;
        }

        [HttpGet(Name = "GetToDo")]
        public async Task<List<ToDo>> Get()
        {
            var  service= unitOfWork.GetRepository<ToDo>();//獲取倉儲服務
            return (List<ToDo>)await service.GetAllAsync();
            
        }
    }
}

4.最后效果

Wpf 使用 Prism 實戰(zhàn)開發(fā)Day11,WPF入門,數(shù)據(jù)庫,c#文章來源地址http://www.zghlxwxcb.cn/news/detail-784541.html

到了這里,關于Wpf 使用 Prism 實戰(zhàn)開發(fā)Day11的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • Wpf 使用 Prism 實戰(zhàn)開發(fā)Day13

    Wpf 使用 Prism 實戰(zhàn)開發(fā)Day13

    在上一節(jié)? ToDoController 控制器,或 IToDoService 服務接口中,方法的傳參都是直接傳的實體類。但在實際開發(fā)過程中,這樣是不允許的。標準且規(guī)范的做法是,定義一個數(shù)據(jù)傳輸層,即Dto層。 1. 創(chuàng)建 BaseDto 基類,用于存放共用屬性。 2. 創(chuàng)建待辦事項 Dto類,并繼承自 BaseDto 基類

    2024年01月20日
    瀏覽(42)
  • Wpf 使用 Prism 實戰(zhàn)開發(fā)Day10

    Wpf 使用 Prism 實戰(zhàn)開發(fā)Day10

    1-9章節(jié)已經(jīng)把基本功能都做好了,但頁面的數(shù)據(jù)是后臺模擬生成的靜態(tài)數(shù)據(jù)。接下來所有章節(jié)就是實現(xiàn),頁面的所有數(shù)據(jù)都是從數(shù)據(jù)庫中獲取,并且實現(xiàn)頁面數(shù)據(jù)的持久化以及增刪改查。 使用Sqlite 做為數(shù)據(jù)庫? 1.打開 MyToDo.Api項目,右鍵=》選擇 管理NuGet 程序包?,進行下載安

    2024年01月25日
    瀏覽(21)
  • Wpf 使用 Prism 實戰(zhàn)開發(fā)Day08

    Wpf 使用 Prism 實戰(zhàn)開發(fā)Day08

    1.效果圖 MemoView.xaml 頁面代碼 ? ? ?1. 在? ItemsControl 中,添加滾動條? ScrollViewer ?這樣使用 ScrollViewer 把內容區(qū)域包裹起來,就能讓內容區(qū)域支持滾動了 ? ? ?? 2 . 添加滾動條后的效果圖如下:? 使用md 中的一個自帶動畫 md:TransitioningContent 來實現(xiàn)該功能? 需要設置一個屬性,

    2024年02月03日
    瀏覽(20)
  • Wpf 使用 Prism 實戰(zhàn)開發(fā)Day03

    Wpf 使用 Prism 實戰(zhàn)開發(fā)Day03

    效果圖: ? 創(chuàng)建 Models ,放置實體類。 實體類需要繼承自 Prism 框架的? BindableBase ,目的是讓實體類支持數(shù)據(jù)的動態(tài)變更! ?例如: 系統(tǒng)導航菜單實體類 創(chuàng)建View文件夾? 放置前端顯示頁面 。例如:創(chuàng)建首頁: MainView.xaml 創(chuàng)建ViewModel 文件夾,放置前端邏輯處理類。意思是:有前端

    2024年02月08日
    瀏覽(23)
  • Wpf 使用 Prism 實戰(zhàn)開發(fā)Day19

    Wpf 使用 Prism 實戰(zhàn)開發(fā)Day19

    由于待辦事項功能頁,數(shù)據(jù)已正常渲染出來了。但頁面新增,查詢,修改,刪除等功能還未實現(xiàn)。本章節(jié)來實現(xiàn)頁面的請求后臺實現(xiàn)CURD(增刪改查) 根據(jù)渲染出來的待辦事項,點擊對應的待辦事項時,查找出該條數(shù)據(jù),顯展示在編輯窗口中。 同時在搜索框中輸入的參數(shù)或選

    2024年04月23日
    瀏覽(26)
  • WPF超好用的框架Prism入門使用,上位機趕緊學起來!

    WPF框架Prism是一種用于開發(fā)模塊化、可重用和可測試的WPF應用程序的框架。它提供了一種簡單而強大的方式來管理復雜應用程序的代碼和構建高度可擴展的應用程序。 如果您想使用Prism框架來開發(fā)WPF應用程序,需要學習以下幾個方面: MVVM模式 :Prism基于MVVM模式,因此需要了

    2024年02月01日
    瀏覽(44)
  • WPF開發(fā)學生信息管理系統(tǒng)【W(wǎng)PF+Prism+MAH+WebApi】(四)

    WPF開發(fā)學生信息管理系統(tǒng)【W(wǎng)PF+Prism+MAH+WebApi】(四)

    最近通過WPF開發(fā)項目,為了對WPF知識點進行總結,所以利用業(yè)余時間,開發(fā)一個學生信息管理系統(tǒng)【Student Information Management System】。前三篇文章進行了框架搭建和模塊劃分,后臺WebApi接口編寫,以及課程管理模塊開發(fā),本文在前三篇基礎之上,繼續(xù)深入開發(fā)學生信息管理系統(tǒng)

    2024年02月04日
    瀏覽(33)
  • WPF開發(fā)之Prism詳解【內附源碼】

    WPF開發(fā)之Prism詳解【內附源碼】

    在實際應用開發(fā)中,隨著項目業(yè)務逐漸復雜,耦合度會越來越高,維護成本也會直線上升,所以解耦也變得越來越重要。Prism框架為WPF開發(fā)中解耦提供了非常便捷的應用。今天主要以一個簡單的小例子,簡述WPF開發(fā)中Prism框架的簡單應用,如有不足之處,還請指正。 Prism是一個

    2023年04月16日
    瀏覽(30)
  • WPF Prism的簡單使用

    新建 WPF 項目,我是基于 .net 5.0-windows 創(chuàng)建的。 引入 Prism.DryIoc(8.1.97) 的 Nuget 包。 App.xaml 中引入命名空間。 將 App.xaml 中 Application 標簽更改成 prism:PrismApplication 并去除 StartUri 屬性,將 App.xaml.cs 中 Application 更改成 PrismApplication 。 實現(xiàn) PrismApplication (實際上是 PrismApplicationBas

    2023年04月14日
    瀏覽(17)
  • WPF框架Prism的使用 二

    這是第二篇關于Prism-WPF的介紹,第一篇中我們簡單介紹了Prism,然后講述了如何搭建一個MVVM的簡單頁面程序。其實我寫的文章就是把github上面的官方例子摘出來自己跑了一遍,然后加上了一些自己的理解,簡單給大家分享一下。 下面放上傳送門: 第一篇的鏈接 官方提供的示

    2024年04月10日
    瀏覽(26)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包