日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[NewLife.XCode]数据模型文件

發布時間:2023/12/4 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [NewLife.XCode]数据模型文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

NewLife.XCode是一個有10多年歷史的開源數據中間件,由新生命團隊(2002~2019)開發完成并維護至今,以下簡稱XCode。

整個系列教程會大量結合示例代碼和運行日志來進行深入分析,蘊含多年開發經驗于其中。

開源地址:https://github.com/NewLifeX/X?(求star, 620+)

?

回到目錄

數據模型文件

數據模型文件是XCode數據庫開發的中心,曾經流行和支持的DB First和Entity First,經過10多年優勝劣汰,只剩下Model First。

XCode的數據模型文件就是一個Model.xml,(名字可變),同目錄配套Build.tt,用于在vs里調用XCode生成基于xml模型文件的多個實體類文件。

從nuget安裝NewLife.XCode時,可以看到項目下多了一個Model.xml和Build.tt,(nfx項目才有,netcore版本由于發布腳本的原因未能兼容)。

其中的Model.xml正是供我們進行數據建模的參考,同時也是XCode內部Membership的模型文件。

<?xml version="1.0" encoding="utf-8"?>
<Tables Version="9.6.6663.16294" NameSpace="XCode.Membership" ConnName="Membership" Output="" BaseClass="Entity"
xmlns
="http://www.newlifex.com/ModelSchema.xsd" xmlns:xs="http://www.w3.org/2001/XMLSchema-instance" xs:schemaLocation="http://www.newlifex.com https://raw.githubusercontent.com/NewLifeX/X/master/XCode/ModelSchema.xsd" >
<Table Name="User" Description="用戶" DbType="SqlServer" RenderGenEntity="true">
<Columns>
<Column Name="ID" DataType="Int32" Identity="True" PrimaryKey="True" Description="編號" />
<Column Name="Name" DataType="String" Master="True" Nullable="False" Description="名稱。登錄用戶名" />
<Column Name="Password" DataType="String" Description="密碼" />
<Column Name="DisplayName" DataType="String" Description="昵稱" />
<Column Name="Sex" DataType="Int32" Description="性別。未知、男、女" Type="SexKinds" />
<Column Name="Mail" DataType="String" Description="郵件" />
<Column Name="Mobile" DataType="String" Description="手機" />
<Column Name="Code" DataType="String" Description="代碼。身份證、員工編號等" />
<Column Name="Avatar" DataType="String" Length="200" Description="頭像" />
<Column Name="RoleID" DataType="Int32" Description="角色。主要角色" />
<Column Name="RoleIDs" DataType="String" Length="200" Description="角色組。次要角色集合" />
<Column Name="Online" DataType="Boolean" Description="在線" />
<Column Name="Enable" DataType="Boolean" Description="啟用" />
<Column Name="Logins" DataType="Int32" Description="登錄次數" />
<Column Name="LastLogin" DataType="DateTime" Description="最后登錄" />
<Column Name="LastLoginIP" DataType="String" Description="最后登錄IP" />
<Column Name="RegisterTime" DataType="DateTime" Description="注冊時間" />
<Column Name="RegisterIP" DataType="String" Description="注冊IP" />
</Columns>
<Indexes>
<Index Columns="Name" Unique="True" />
<Index Columns="RoleID" />
</Indexes>
</Table>
<Table Name="Role" Description="角色" RenderGenEntity="true">
<Columns>
<Column Name="ID" DataType="Int32" Identity="True" PrimaryKey="True" Description="編號" />
<Column Name="Name" DataType="String" Master="True" Nullable="False" Description="名稱" />
<Column Name="IsSystem" DataType="Boolean" Description="系統。用于業務系統開發使用,不受數據權限約束,禁止修改名稱或刪除" />
<Column Name="Remark" DataType="String" Description="說明" />
<Column Name="Permission" DataType="String" Length="500" Description="權限。對不同資源的權限,逗號分隔,每個資源的權限子項豎線分隔" />
<Column Name="CreateUserID" DataType="Int32" Description="創建用戶" />
<Column Name="CreateIP" DataType="String" Description="創建地址" />
<Column Name="CreateTime" DataType="DateTime" Description="創建時間" />
<Column Name="UpdateUserID" DataType="Int32" Description="更新用戶" />
<Column Name="UpdateIP" DataType="String" Description="更新地址" />
<Column Name="UpdateTime" DataType="DateTime" Description="更新時間" />
</Columns>
<Indexes>
<Index Columns="Name" Unique="True" />
</Indexes>
</Table>
<Table Name="Menu" Description="菜單" BaseType="EntityTree" RenderGenEntity="true">
<Columns>
<Column Name="ID" DataType="Int32" Identity="True" PrimaryKey="True" Description="編號" />
<Column Name="Name" DataType="String" Master="True" Nullable="False" Description="名稱" />
<Column Name="DisplayName" DataType="String" Description="顯示名" />
<Column Name="FullName" DataType="String" Length="200" Description="全名" />
<Column Name="ParentID" DataType="Int32" Description="父編號" />
<Column Name="Url" DataType="String" Length="200" Description="鏈接" />
<Column Name="Sort" DataType="Int32" Description="排序" />
<Column Name="Icon" DataType="String" Description="圖標" />
<Column Name="Visible" DataType="Boolean" Description="可見" />
<Column Name="Necessary" DataType="Boolean" Description="必要。必要的菜單,必須至少有角色擁有這些權限,如果沒有則自動授權給系統角色" />
<Column Name="Permission" DataType="String" Length="200" Description="權限子項。逗號分隔,每個權限子項名值豎線分隔" />
<Column Name="Remark" DataType="String" Length="200" Description="備注" />
</Columns>
<Indexes>
<Index Columns="Name" />
<Index Columns="ParentID,Name" Unique="True" />
</Indexes>
</Table>
<Table Name="Log" Description="日志" ConnName="Log" RenderGenEntity="true">
<Columns>
<Column Name="ID" DataType="Int32" Identity="True" PrimaryKey="True" Description="編號" />
<Column Name="Category" DataType="String" Description="類別" />
<Column Name="Action" DataType="String" Description="操作" />
<Column Name="LinkID" DataType="Int32" Description="鏈接" />
<Column Name="UserName" DataType="String" Description="用戶名" />
<Column Name="CreateUserID" DataType="Int32" Description="用戶編號" />
<Column Name="CreateIP" DataType="String" Description="IP地址" />
<Column Name="CreateTime" DataType="DateTime" Description="時間" />
<Column Name="Remark" DataType="String" Length="500" Description="詳細信息" />
</Columns>
<Indexes>
<Index Columns="Category" />
<Index Columns="CreateUserID" />
<Index Columns="CreateTime" />
</Indexes>
</Table>
<Table Name="UserOnline" Description="用戶在線" ConnName="Log">
<Columns>
<Column Name="ID" DataType="Int32" Identity="True" PrimaryKey="True" Description="編號" />
<Column Name="UserID" DataType="Int32" Description="用戶" />
<Column Name="Name" DataType="String" Master="True" Description="名稱" />
<Column Name="SessionID" DataType="String" Description="會話。Web的SessionID或Server的會話編號" />
<Column Name="Times" DataType="Int32" Description="次數" />
<Column Name="Page" DataType="String" Description="頁面" />
<Column Name="Status" DataType="String" Length="200" Description="狀態" />
<Column Name="OnlineTime" DataType="Int32" Description="在線時間。本次在線總時間,秒" />
<Column Name="CreateIP" DataType="String" Description="創建地址" />
<Column Name="CreateTime" DataType="DateTime" Description="創建時間" />
<Column Name="UpdateTime" DataType="DateTime" Description="修改時間" />
</Columns>
<Indexes>
<Index Columns="UserID" />
<Index Columns="SessionID" />
<Index Columns="CreateTime" />
</Indexes>
</Table>
<Table Name="VisitStat" Description="訪問統計" ConnName="Log">
<Columns>
<Column Name="ID" DataType="Int32" Identity="True" PrimaryKey="True" Description="編號" />
<Column Name="Level" DataType="Int32" Description="層級" Type="XCode.Statistics.StatLevels" />
<Column Name="Time" DataType="DateTime" Description="時間" />
<Column Name="Page" DataType="String" Nullable="False" Description="頁面" />
<Column Name="Title" DataType="String" Master="True" Description="標題" />
<Column Name="Times" DataType="Int32" Description="次數" />
<Column Name="Users" DataType="Int32" Description="用戶" />
<Column Name="IPs" DataType="Int32" Description="IP" />
<Column Name="Error" DataType="Int32" Description="錯誤" />
<Column Name="Cost" DataType="Int32" Description="耗時。毫秒" />
<Column Name="MaxCost" DataType="Int32" Description="最大耗時。毫秒" />
<Column Name="CreateTime" DataType="DateTime" Description="創建時間" />
<Column Name="UpdateTime" DataType="DateTime" Description="更新時間" />
<Column Name="Remark" DataType="String" Length="500" Description="詳細信息" />
</Columns>
<Indexes>
<Index Columns="Page,Level,Time" Unique="True" />
<Index Columns="Level,Time" />
</Indexes>
</Table>
</Tables>

真實項目開發中,一般數據層類庫項目為不同子模塊劃分目錄,每個目錄有自己的Model.xml+Build.tt,負責本模塊的模型維護已經實體類生成。

頭部屬性解釋:

Output,輸出目錄

NameSpace,命名空間

ConnName,連接名,對應app.config/web.config中connectionStrings下的name

BaseEntity,基類,默認Entity,同一個子模塊也可以共用自己的泛型基類EntityBase

Tables中的這些屬性對本模型文件所有Table有效,各個Table上也可以指定這些屬性,以覆蓋全局設置

?

Table.Name?就是生成的實體類類名,如果實際表名不同,可用TableName指定表名。

Column.Name就是生成的實體類屬性名,如果實際字段名不同,可用ColumnName指定字段名。

?

字符串長度Length默認50,不建議小于50,-1表示最大ntext

其它字段不建議設置長度,特別不建議給Double和Decimal設置精度

?

字段Column只需要DataType指定.Net類型即可,反向工程會根據使用數據庫的不同而映射到不同數據庫類型。

如果不喜歡XCode推薦的數據庫類型,可在Column中通過RawType指定原始數據庫類型。

Column支持Type指定枚舉類型,建議是帶命名空間的全名。例如上面User表中Sex類型的字段就是枚舉SexKinds

?

可以通過碼神工具/建模工具,從數據庫中導出數據表對應的模型文件;

也可以編碼通過DAL.Export導出模型文件;

魔方的系統管理數據庫頁面,也可以導出模型文件;

?

回到目錄

數據名字規范

模型文件的Table名將會生成實體類類名,Column字段名將會生成實體類屬性名,因此命名規范很重要。

  • 名稱必須使用通俗易懂的英文單詞全拼,常用的縮略詞(如ID)除外

  • 采用大駝峰命名,每個單詞首字母大寫,其它小寫,類型屬性名符合.Net規范

  • 名稱必須簡潔明了,不要加多余的前綴(如表名前加tbl),字段名也不要加表名前綴

  • ?

    ?

    不得使用SQL關鍵字或C#關鍵字作為表名或字段名

  • ?

    ?

    使用數據庫常用類型,如Int32和String,大文本長度-1

  • ?

    ?

    給表和字段加上說明,作為文件名,以及生成代碼的注釋

  • ?

    ?

    每張表必須有唯一主鍵字段(建議自增ID)

  • ?

    ?

    主從表中,從表加關聯字段(主表名+主表主鍵名)。XCode會識別為主從關系,生成擴展屬性

  • ?

    ?

    每張表設置好索引,注意是否唯一。XCode會識別為索引,生成擴展查詢

  • ?

    回到目錄

    數據類型規范

    模型文件設計要求開發者有一點數據庫基礎,至少要能明確表、字段和索引的概念。

    然而要求又遠比數據庫要低得多,因為咱們推崇極致簡單的原則。

    類型


    數據庫類型

    推薦

    備注

    Int32

    整數

    int

    強烈

    ?優先

    String

    字符串

    nvarchar(50)

    強烈

    ?默認變長50

    DateTime

    時間日期

    datetime

    強烈

    ?不建議純日期或時間

    Boolean

    布爾型

    bit

    強烈

    ?MySql中建議tinyint替代枚舉來實現布爾型

    Int64

    長整型

    long

    強烈

    ?有可能超過21億的整數,選長整型

    Decimal

    十進制

    money

    慎用

    ?高精度貨幣型時采用

    Double

    雙精度

    double

    慎用

    ?特別慎用,避免浮點運算導致精度丟失?

    Int16


    short

    禁用

    ?由Int32替代

    Byte


    tinyint

    禁用

    ?由Int32替代?

    Single


    single

    禁用

    ?由Double替代?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    回到目錄

    常用字段推薦

    為了便于開發,XCode默認優待以下字段:

    <Column Name="CreateUser" DataType="String" Description="創建者" />
    <Column Name="CreateUserID" DataType="Int32" Description="創建者" />
    <Column Name="CreateTime" DataType="DateTime" Description="創建時間" />
    <Column Name="CreateIP" DataType="String" Description="創建地址" />
    <Column Name="UpdateUser" DataType="String" Description="更新者" />
    <Column Name="UpdateUserID" DataType="Int32" Description="更新者" />
    <Column Name="UpdateTime" DataType="DateTime" Description="更新時間" />
    <Column Name="UpdateIP" DataType="String" Description="更新地址" />

    ?

    時間組CreateTime/UpdateTime字段對應TimeModule,在新增或更新時自動賦值;

    IP組CreateIP/UpdateIP字段對應IPModule,在Web新增或更新時自動賦值;

    用戶組CreateUser(ID)/UpdateUser(ID)字段對應UserModule,在Web新增或更新時字段賦值;

    一句話:用了這些字段,在Insert時自動給CreateAbc賦值,在Update時自動給UpdateAbc賦值!

    ?

    ?

    回到目錄

    系列教程

    NewLife.XCode教程系列[2019版]

  • 增刪改查入門??焖僬宫F用法,代碼配置連接字符串

  • 數據模型文件。建立表格字段和索引,名字以及數據類型規范,推薦字段(時間,用戶,IP)

  • 實體類詳解。數據類業務類,泛型基類,接口

  • 功能設置。連接字符串,調試開關,SQL日志,慢日志,參數化,執行超時。代碼與配置文件設置,連接字符串局部設置

  • 反向工程。自動建立數據庫數據表

  • 數據初始化。InitData寫入初始化數據

  • 高級增刪改。重載攔截,自增字段,Valid驗證,實體模型(時間,用戶,IP)

  • 臟數據。如何產生,怎么利用

  • 增量累加。高并發統計

  • 事務處理。單表和多表,不同連接,多種寫法

  • 擴展屬性。多表關聯,Map映射

  • 高級查詢。復雜條件,分頁,自定義擴展FieldItem,查總記錄數,查匯總統計

  • 數據層緩存。Sql緩存,更新機制

  • 實體緩存。全表整理緩存,更新機制

  • 對象緩存。字典緩存,適用用戶等數據較多場景。

  • 百億級性能。字段精煉,索引完備,合理查詢,充分利用緩存

  • 實體工廠。元數據,通用處理程序

  • 角色權限。Membership

  • 導入導出。Xml,Json,二進制,網絡或文件

  • 分表分庫。常見拆分邏輯

  • 高級統計。聚合統計,分組統計

  • 批量寫入。批量插入,批量Upsert,異步保存

  • 實體隊列。寫入級緩存,提升性能。

  • 備份同步。備份數據,恢復數據,同步數據

  • 數據服務。提供RPC接口服務,遠程執行查詢,例如SQLite網絡版

  • 大數據分析。ETL抽取,調度計算處理,結果持久化


  • 總結

    以上是生活随笔為你收集整理的[NewLife.XCode]数据模型文件的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。