模型文件

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

<?xml version="1.0" encoding="utf-8"?>
<Tables Version="9.9.6881.41313" NameSpace="XCode.Membership" ConnName="Membership" 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="Student" Description="学生" >
    <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="Sex" DataType="Int32" Description="性别。未知、男、女" Type="SexKinds" />
    </Columns>
    <Indexes>
      <Index Columns="Name" Unique="true" />
    </Indexes>
  </Table>
</Tables>

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

新数据库

  • 以上是个简单的例子,复制到模型文件,然后调用XCode.Code.EntityBuilder.Build方法,根据该模型文件生成实体类。也可使用tt文件生成,本质上都是调用该方法生成实体类。
  • 生成实体类之后包含在项目中即可使用
    class Program
    {
        static void Main(string[] args)
        {
            XTrace.UseConsole();

            var student = new Student
            {
                Name = Rand.NextString(5),
                Sex = SexKinds.,
                DisplayName = Rand.NextString(6),
            };
            student.Insert();

            Console.WriteLine("ID:{0}",student.ID);
            Console.WriteLine(student.ToJson());
            Console.ReadKey();
        }
    }

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

使用现有数据库

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

索引

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

结构

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

分组

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

上次更新: 2018-12-2 12:52:43