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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[NewLife.XCode]数据模型文件

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

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

整個系列教程會大量結(jié)合示例代碼和運行日志來進(jìn)行深入分析,蘊含多年開發(fā)經(jīng)驗于其中。

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

?

回到目錄

數(shù)據(jù)模型文件

數(shù)據(jù)模型文件是XCode數(shù)據(jù)庫開發(fā)的中心,曾經(jīng)流行和支持的DB First和Entity First,經(jīng)過10多年優(yōu)勝劣汰,只剩下Model First。

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

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

其中的Model.xml正是供我們進(jìn)行數(shù)據(jù)建模的參考,同時也是XCode內(nèi)部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="登錄次數(shù)" />
<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="系統(tǒng)。用于業(yè)務(wù)系統(tǒng)開發(fā)使用,不受數(shù)據(jù)權(quán)限約束,禁止修改名稱或刪除" />
<Column Name="Remark" DataType="String" Description="說明" />
<Column Name="Permission" DataType="String" Length="500" Description="權(quán)限。對不同資源的權(quán)限,逗號分隔,每個資源的權(quán)限子項豎線分隔" />
<Column Name="CreateUserID" DataType="Int32" Description="創(chuàng)建用戶" />
<Column Name="CreateIP" DataType="String" Description="創(chuàng)建地址" />
<Column Name="CreateTime" DataType="DateTime" Description="創(chuàng)建時間" />
<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="圖標(biāo)" />
<Column Name="Visible" DataType="Boolean" Description="可見" />
<Column Name="Necessary" DataType="Boolean" Description="必要。必要的菜單,必須至少有角色擁有這些權(quán)限,如果沒有則自動授權(quán)給系統(tǒng)角色" />
<Column Name="Permission" DataType="String" Length="200" Description="權(quán)限子項。逗號分隔,每個權(quán)限子項名值豎線分隔" />
<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="詳細(xì)信息" />
</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="次數(shù)" />
<Column Name="Page" DataType="String" Description="頁面" />
<Column Name="Status" DataType="String" Length="200" Description="狀態(tài)" />
<Column Name="OnlineTime" DataType="Int32" Description="在線時間。本次在線總時間,秒" />
<Column Name="CreateIP" DataType="String" Description="創(chuàng)建地址" />
<Column Name="CreateTime" DataType="DateTime" Description="創(chuàng)建時間" />
<Column Name="UpdateTime" DataType="DateTime" Description="修改時間" />
</Columns>
<Indexes>
<Index Columns="UserID" />
<Index Columns="SessionID" />
<Index Columns="CreateTime" />
</Indexes>
</Table>
<Table Name="VisitStat" Description="訪問統(tǒng)計" 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="標(biāo)題" />
<Column Name="Times" DataType="Int32" Description="次數(shù)" />
<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="創(chuàng)建時間" />
<Column Name="UpdateTime" DataType="DateTime" Description="更新時間" />
<Column Name="Remark" DataType="String" Length="500" Description="詳細(xì)信息" />
</Columns>
<Indexes>
<Index Columns="Page,Level,Time" Unique="True" />
<Index Columns="Level,Time" />
</Indexes>
</Table>
</Tables>

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

頭部屬性解釋:

Output,輸出目錄

NameSpace,命名空間

ConnName,連接名,對應(yīng)app.config/web.config中connectionStrings下的name

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

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

?

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

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

?

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

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

?

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

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

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

?

可以通過碼神工具/建模工具,從數(shù)據(jù)庫中導(dǎo)出數(shù)據(jù)表對應(yīng)的模型文件;

也可以編碼通過DAL.Export導(dǎo)出模型文件;

魔方的系統(tǒng)管理數(shù)據(jù)庫頁面,也可以導(dǎo)出模型文件;

?

回到目錄

數(shù)據(jù)名字規(guī)范

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

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

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

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

  • ?

    ?

    不得使用SQL關(guān)鍵字或C#關(guān)鍵字作為表名或字段名

  • ?

    ?

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

  • ?

    ?

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

  • ?

    ?

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

  • ?

    ?

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

  • ?

    ?

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

  • ?

    回到目錄

    數(shù)據(jù)類型規(guī)范

    模型文件設(shè)計要求開發(fā)者有一點數(shù)據(jù)庫基礎(chǔ),至少要能明確表、字段和索引的概念。

    然而要求又遠(yuǎn)比數(shù)據(jù)庫要低得多,因為咱們推崇極致簡單的原則。

    類型


    數(shù)據(jù)庫類型

    推薦

    備注

    Int32

    整數(shù)

    int

    強烈

    ?優(yōu)先

    String

    字符串

    nvarchar(50)

    強烈

    ?默認(rèn)變長50

    DateTime

    時間日期

    datetime

    強烈

    ?不建議純?nèi)掌诨驎r間

    Boolean

    布爾型

    bit

    強烈

    ?MySql中建議tinyint替代枚舉來實現(xiàn)布爾型

    Int64

    長整型

    long

    強烈

    ?有可能超過21億的整數(shù),選長整型

    Decimal

    十進(jìn)制

    money

    慎用

    ?高精度貨幣型時采用

    Double

    雙精度

    double

    慎用

    ?特別慎用,避免浮點運算導(dǎo)致精度丟失?

    Int16


    short

    禁用

    ?由Int32替代

    Byte


    tinyint

    禁用

    ?由Int32替代?

    Single


    single

    禁用

    ?由Double替代?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    ?

    回到目錄

    常用字段推薦

    為了便于開發(fā),XCode默認(rèn)優(yōu)待以下字段:

    <Column Name="CreateUser" DataType="String" Description="創(chuàng)建者" />
    <Column Name="CreateUserID" DataType="Int32" Description="創(chuàng)建者" />
    <Column Name="CreateTime" DataType="DateTime" Description="創(chuàng)建時間" />
    <Column Name="CreateIP" DataType="String" Description="創(chuàng)建地址" />
    <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字段對應(yīng)TimeModule,在新增或更新時自動賦值;

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

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

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

    ?

    ?

    回到目錄

    系列教程

    NewLife.XCode教程系列[2019版]

  • 增刪改查入門。快速展現(xiàn)用法,代碼配置連接字符串

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

  • 實體類詳解。數(shù)據(jù)類業(yè)務(wù)類,泛型基類,接口

  • 功能設(shè)置。連接字符串,調(diào)試開關(guān),SQL日志,慢日志,參數(shù)化,執(zhí)行超時。代碼與配置文件設(shè)置,連接字符串局部設(shè)置

  • 反向工程。自動建立數(shù)據(jù)庫數(shù)據(jù)表

  • 數(shù)據(jù)初始化。InitData寫入初始化數(shù)據(jù)

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

  • 臟數(shù)據(jù)。如何產(chǎn)生,怎么利用

  • 增量累加。高并發(fā)統(tǒng)計

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

  • 擴展屬性。多表關(guān)聯(lián),Map映射

  • 高級查詢。復(fù)雜條件,分頁,自定義擴展FieldItem,查總記錄數(shù),查匯總統(tǒng)計

  • 數(shù)據(jù)層緩存。Sql緩存,更新機制

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

  • 對象緩存。字典緩存,適用用戶等數(shù)據(jù)較多場景。

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

  • 實體工廠。元數(shù)據(jù),通用處理程序

  • 角色權(quán)限。Membership

  • 導(dǎo)入導(dǎo)出。Xml,Json,二進(jìn)制,網(wǎng)絡(luò)或文件

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

  • 高級統(tǒng)計。聚合統(tǒng)計,分組統(tǒng)計

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

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

  • 備份同步。備份數(shù)據(jù),恢復(fù)數(shù)據(jù),同步數(shù)據(jù)

  • 數(shù)據(jù)服務(wù)。提供RPC接口服務(wù),遠(yuǎn)程執(zhí)行查詢,例如SQLite網(wǎng)絡(luò)版

  • 大數(shù)據(jù)分析。ETL抽取,調(diào)度計算處理,結(jié)果持久化


  • 總結(jié)

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

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。