.netcore2.0+pgsql 腳手架

mystaging介紹

  • 這是一個 .netcore+pgsql 的腳手架,能夠一鍵生成實體對象和業務層接口,讓開發人員無需關注底層變更,專一編寫業務代碼,它可讓你使用 .netcore2.0的新特性,基於 pgsql 數據庫,能夠在項目中自由的使用 lambda 表達式編寫業務,同時支持自定義的 sql 語句。

特性git

  • mystaging,很是的小巧,下面將介紹 mystaging 的項目框架。
  • 一鍵生成,無需編寫實體模型代碼
  • 支持數據庫枚舉類型自動映射生成
  • 支持視圖自動生成實體模型和業務操做接口
  • 該項目目前處於起步階段,可能不適用於大型項目,請結合業務須要酌情使用
  • 項目 gitbhub 地址:https://github.com/lianggx/mystaging
  • 開發交流QQ羣:614072957

如何開始?github

使用構建工具 MyStaging.App
  1. 將 MyStaging.csproj 項目打包成 MyStaging.zip ,並複製到 MyStaging.App/bin/debug 目錄下
  2. 編輯構建工具下的 @build.bat 文件,配置相關參數,參數配置見參數說明
  3. 運行該批處理文件,能夠直接生成 proj.db 項目文件
參數說明
  • -h host,數據庫所在服務器地址
  • -p port,端口號
  • -u username,登陸數據庫帳號名稱
  • -a password,登陸密碼
  • -d database,數據庫名稱
  • -pool pool,數據庫鏈接池最大值,默認 32
  • -proj csproj,生成的 db 層項目名稱
  • -o output path,生成項目的輸出路徑
初始化數據庫鏈接
  • 在生成的 db 項目文件根目錄下,找到: _startup.cs 文件,在程序入口 Program.cs 或者 Startup.cs 的適當位置,使用如下代碼,傳遞日誌記錄對象和數據庫鏈接字符串進行 db 層初始化
string connectionString = "Host=127.0.0.1;Port=5432;Username=postgres;Password=123456;Database=your db;Pooling=true;Maximum Pool Size=100";
 ILogger logger = loggerFactory.CreateLogger<MyStaging.Helpers.PgSqlHelper>();
 _startup.Init(logger, connectionString);

實體對象說明
構建工具會自動生成DAL層,包含實體模型和對象關係,因爲執行數據庫查詢的過程當中,高度依賴實體模型映射,因此在生成實體模型時,對實體作了一些ORM的映射設置,這些設置對實體模型的影響很是小。sql

  • EntityMappingAttribute
    該特性類接受一個屬性:TableName,指明該實體模型映射到數據庫中的>模式.表名,如數據庫

    ```
     [EntityMapping(TableName = "public.user")]
     public partial class Public_userModel
     {
     }
     ```
  • ForeignKeyMappingAttribute
    應用該該特性類到屬性上,表示這個是一個外鍵引用的屬性,如json

    ```
      private Public_userModel _public_User=null;
      [ForeignKeyMapping,JsonIgnore]public Public_userModel Public_User { get{ if(_public_User==null)_public_User= Public_user.Context.Where(f=>f.Id==this.User_id).ToOne();  return _public_User;} }
      ```
      *以上代碼還應用了特性:JsonIgnore ,表示,該外鍵在對象進行 json 序列化的時候選擇忽略該屬性*
  • NonDbColumnMappingAttribute
    應用該該特性類到屬性上,表示這個是一個自定義的屬性,在進行數據庫查詢的時候將忽略該屬性,如c#

    ```
     [NonDbColumnMappingAttribute,JsonIgnore] public  Public_user.UpdateBuilder UpdateBuilder{get{return new Public_user.UpdateBuilder(this.Id);}}
     ```

以上代碼還應用了特性:JsonIgnore ,表示,該外鍵在對象進行 json 序列化的時候選擇忽略該屬性服務器

MyStaging 命名空間

  • MyStaging.Common 主要定義公共類型和資源
  • MyStaging.Helpers 數據庫操做幫助類、鏈接池管理工具類、DAL操做輔助函數
  • MyStaging.Mapping 動態對象生成管理、實體對象映射定義

MyStaging.Helpers.QueryContext
DAL繼承的基類,該類實現了全部對數據庫操做的封裝,可直接繼承使用,若是使用腳手架附帶的構建工具,直接進行業務編寫便可app


數據庫操做框架

  • 插入記錄
Public_userModel user = new Public_userModel();
    user.Id = Guid.NewGuid();
    user.Login_name = "test@gmail.com";
    Public_user.Insert(user);
  • 修改記錄
// 自動根據主鍵修改
    Public_userModel user = new Public_userModel();
    user.UpdateBuilder.SetLogin_time(DateTime.Now).SaveChange(); 

    // 自定義條件修改
    user.UpdateBuilder.SetLogin_time(DateTime.Now).Where(f => f.Sex == true).SaveChange();

    // 直接修改
    Public_user.Update(Guid.Empty).SetLogin_time(DateTime.Now).Where(f => f.Sex == true).SaveChange();

    // 自定義條件的直接修改
    Public_user.UpdateBuilder.SetLogin_time(DateTime.Now).Where(f => f.Id == Guid.Empty).Where(f => f.Sex == true).SaveChange();
  • 刪除記錄
// 根據主鍵刪除
    Public_user.Delete(Guid.Empty);
    // 根據條件刪除
    Public_user.DeleteBuilder.Where(f => f.Id == Guid.Empty).Where(f => f.Sex == true).SaveChange();
  • 查詢單條記錄
Public_userModel user = Public_user.Context.Where(f => f.Login_name == "test@gmail.com").ToOne();
  • 指定查詢列
Public_userModel user = Public_user.Context.Where(f => f.Login_name == "test@gmail.com").ToOne("id","login_name");
  • 指定查詢返回類型
public class UserModel{
        public string Login_name{get;set;}
        public Guid Id{get;set;}
    }
    Public_userModel user = Public_user.Context.Where(f => f.Login_name == "test@gmail.com").ToOne<UserModel>("id","login_name");
  • 查詢列表
List<Public_userModel> list = Public_user.Context.ToList();
    List<Public_userModel> list = Public_user.Context.Where(f => f.Login_name == "test@gmail.com").ToList();    

    public class UserModel{
        public string Login_name{get;set;}
        public Guid Id{get;set;}
    }

    List<UserModel> list = Public_user.Context.ToList<UserModel>("id","login_name");
  • 錶鏈接查詢
public class UserModel{
        public string Login_name{get;set;}
        public Guid Id{get;set;}
    }

    List<UserModel> list = Public_user.Context.Union<TopicModel>("b",UnionType.INNER_JOIN,(a,b)=>a.Id==b.User_Id).Where(a=>a.Id=Guid.Empty).Where<TopicModel>(b=>b.Publish==true).ToList<UserModel>("id","login_name");
  • 分頁
Public_user.Context.Where(f => f.Login_name == "test@gmail.com").OrderBy(f=>f.State).Page(1,10);
  • 排序
Public_user.Context.Where(f => f.Login_name == "test@gmail.com").OrderBy(f=>f.State);
    Public_user.Context.Where(f => f.Login_name == "test@gmail.com").OrderDescing(f=>f.State);
  • 聚合查詢
Public_user.Context.Where(f => f.Login_name == "test@gmail.com").Avg(f=>f.Age);
    Public_user.Context.Where(f => f.Login_name == "test@gmail.com").Sum(f=>f.Blance);
    // Max,Min,GroupBy,Having
  • 事務
PgSqlHelper.Transaction(() =>
        {
            Public_userModel user= Public_user.Context.Where(f => f.Login_name == "test@gmail.com").ToOne();
            user.UpdateBuilder.SetLogin_time(DateTime.Now).SaveChange();
        });
相關文章
相關標籤/搜索