模型文件

模型文件配合tt文件完成代码生成部分功能,一个Table元素生成一个实体类,对应一个表。模型文件可从现有数据库生成,也可手动编写。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <Tables Version="9.9.6881.41313" NameSpace="XCode.Membership" ConnName="Membership" BaseClass="Entity"
  3. xmlns="http://www.newlifex.com/ModelSchema.xsd"
  4. xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
  5. xs:schemaLocation="http://www.newlifex.com https://raw.githubusercontent.com/NewLifeX/X/master/XCode/ModelSchema.xsd" >
  6. <Table Name="Student" Description="学生" >
  7. <Columns>
  8. <Column Name="ID" DataType="Int32" Identity="true" PrimaryKey="true" Description="编号" />
  9. <Column Name="Name" DataType="String" Master="True" Nullable="false" Description="名称。登录用户名" />
  10. <Column Name="DisplayName" DataType="String" Description="昵称" />
  11. <Column Name="Sex" DataType="Int32" Description="性别。未知、男、女" Type="SexKinds" />
  12. </Columns>
  13. <Indexes>
  14. <Index Columns="Name" Unique="true" />
  15. </Indexes>
  16. </Table>
  17. </Tables>

上面就是一个简单的例子,模型文件基本结构。xmlnsxmlns:xsxs:schemaLocation这些东西给该模型文件添加了架构,上面的元素就会有提示

新数据库

  • 以上是个简单的例子,复制到模型文件,然后调用XCode.Code.EntityBuilder.Build方法,根据该模型文件生成实体类。也可使用tt文件生成,本质上都是调用该方法生成实体类。
  • 生成实体类之后包含在项目中即可使用
  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. XTrace.UseConsole();
  6. var student = new Student
  7. {
  8. Name = Rand.NextString(5),
  9. Sex = SexKinds.男,
  10. DisplayName = Rand.NextString(6),
  11. };
  12. student.Insert();
  13. Console.WriteLine("ID:{0}",student.ID);
  14. Console.WriteLine(student.ToJson());
  15. Console.ReadKey();
  16. }
  17. }

新建控制台项目,运行以上代码,即可自动创建sqlite数据库,并插入一条数据。

使用现有数据库

使用码神工具连接数据库并生成实体类

索引

Indexes元素代表的是索引,XCode会自动生成对应索引以及相应拓展方法。

结构

  • 生成的实体类文件分两部分,一部分是基本数据,值得注意的是BindTable特性
  1. [BindTable("Student", Description = "学生", ConnName = "Membership", DbType = DatabaseType.None)]
  2. public partial class Student : IStudent
  3. {}
  • 其中ConnName对应的是数据库字符串连接名,实体类的所有数据库操作,将发生在该连接名指定的数据库连接上。DbType对应的是数据库类型,仅用于记录实体类由何种类型数据库生成,当且仅当目标数据库同为该数据库类型时,采用实体属性信息上的RawType作为反向工程的目标字段类型,以期获得开发和生产的最佳兼容。
  • 另一部分是带有Biz的实体类,用来写业务,每次生成新的实体类,该文件不会被覆盖,仅在第一次生成。

分组

如果模型文件过多,全部放一起太乱,可以新建文件夹,复制一份tt文件和XML模型文件到新的文件夹即可