[分享] 一款極簡單的 BaseEntity CRUD 方法


前言

嘗試過 ado.net、dapper、ef,以及Repository倉儲,甚至自己還寫過生成器工具,以便做常規CRUD操作。

它們日常操作不方便之處:

  • 每次使用前需要聲明,再操作;

  • 很多人一個實體類,對應一個操作類(或DAL、DbContext、Repository);

BaseEntity 是一種極簡單的 CodeFirst 開發方式,特別對單表或多表CRUD,利用繼承節省了每個實體類的重復屬性(創建時間、ID等字段),軟件刪除等功能,進行 crud 操作時不必時常考慮倉儲的使用;

本文介紹 BaseEntity 一種極簡約的 CRUD 操作方法。

功能特點

  • 自動遷移實體結構(CodeFirst),到數據庫;

  • 直接操作實體的方法,進行 CRUD 操作;

  • 簡化用戶定義實體類型,省去主鍵、常用字段的配置(如CreateTime、UpdateTime);

  • 實現單表、多表查詢的軟刪除邏輯;

聲明

示范項目:https://github.com/2881099/FreeSql/tree/master/Examples/base_entity

參考 BaseEntity.cs 源碼(約100行),拷貝項目中使用,然后添加 nuget 引用包:

dotnet add package FreeSql.Repository

dotnet add package FreeSql.Provider.Sqlite

1、定義一個主鍵 int 並且自增的實體類型,BaseEntity TKey 指定為 int/long 時,會認為主鍵是自增;

public class UserGroup : BaseEntity<UserGroup, int>
{
    public string GroupName { get; set; }
}

如果不想主鍵是自增鍵,可以重寫屬性:

public class UserGroup : BaseEntity<UserGroup, int>
{
    [Column(IsIdentity = false)] 
    public override int Id { get; set; }
    public string GroupName { get; set; }
}

有關更多實體的特性配置,請參考資料:https://github.com/2881099/FreeSql/wiki/實體特性

2、定義一個主鍵 Guid 的實體類型,保存數據時會自動產生有序不重復的 Guid 值(不用自己指定 Guid.NewGuid());

public class User : BaseEntity<UserGroup, Guid>
{
    public string UserName { get; set; }
}

3、定義多主鍵的實體類型,可以在 static 構造函數中重寫字段名;

public class User2 : BaseEntity<User2, Guid, int>
{
    static User2()
    {
        User2.Orm.CodeFirst.ConfigEntity<User2>(t =>
        {
            t.Property(a => a.PkId1).Name("UserId");
            t.Property(a => a.PkId2).Name("Index");
        });
    }

    public string Username { get; set; }
}

CRUD 使用

//添加
var item = new UserGroup { GroupName = "組一" };
item.Insert();

//更新
item.GroupName = "組二";
item.Update();

//添加或更新
item.Save();

//軟刪除
item.Delete();

//恢復軟刪除
item.Restore();

//根據主鍵獲取對象
var item = UserGroup.Find(1);

//查詢數據
var items = UserGroup.Where(a => a.Id > 10).ToList();

實體類型.Select 是一個查詢對象,使用方法和 FreeSql.ISelect 一樣;

支持多表查詢時,軟刪除條件會附加在每個表中;

有關更多查詢方法,請參考資料:https://github.com/2881099/FreeSql/wiki/查詢


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM