[共有]極めて簡単なBaseEntity CRUD方法

2669 ワード

前言


試してみたNet、dapper、ef、Repository倉庫、さらには、通常のCRUD操作のためにジェネレータツールを自分で書いたこともあります.
日常的な操作が不便な点:
  • 毎回使用する前に宣言し、操作する必要があります.
  • 多くの人が1つのエンティティクラスで、1つの操作クラス(または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
    {
        public string GroupName { get; set; }
    }

    プライマリ・キーがオートインクリメント・キーでない場合は、プロパティを書き換えることができます.
    public class UserGroup : BaseEntity
    {
        [Column(IsIdentity = false)] 
        public override int Id { get; set; }
        public string GroupName { get; set; }
    }

    詳細なエンティティのプロパティ構成については、次の資料を参照してください.https://github.com/2881099/Fr...
    2、プライマリ・キーGuidのエンティティ・タイプを定義し、データを保存すると自動的に順序付けられた重複しないGuid値が生成されます(Guid.NewGuid()を自分で指定する必要はありません).
    public class User : BaseEntity
    {
        public string UserName { get; set; }
    }

    3、マルチプライマリ・キーのエンティティ・タイプを定義し、staticコンストラクション関数でフィールド名を書き換えることができる.
    public class User2 : BaseEntity
    {
        static User2()
        {
            User2.Orm.CodeFirst.ConfigEntity(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/Fr...