上一节中鄙人通过解析表达式树生成Sql碎片,其中我也把解析表达式类代码贴了出来,文章发布之后我对ExpressionAnalyzer类做了些改动,下面我还会将代码贴出来,废话不多说,直接进入今天的主题。

实体类设计:

  首先,我觉得要想直接通过实体类生成Sql语句,那么你可能要知道这个实体类对应数据库表中的主键和外键是什么,在此我加入了两个特性来标识主键和外键关系。如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
/// <summary>
    /// 外键表特性(导航属性)
    /// </summary>
    public class GuidanceAttribute : System.Attribute
    {
        /// <summary>
        /// 依赖字段
        /// </summary>
        public string DepandField { getset; }
    }
 
 public class MessageAttribute : System.Attribute
    {
        /// <summary>
        /// 链接字符串名
        /// </summary>
        public string ConStr { getset; }
    }
 public class PrimaryKeyAttribute : System.Attribute
    {
 
    }

  实体类如下:

自己动手写ORM(02):Sql生成器实现
 1 using LC.Model;
 2 using LC.Model.Attribute;
 3 using System;
 4 using System.Collections.Generic;
 5 using System.Linq;
 6 using System.Text;
 7 using System.Threading.Tasks;
 8 using LC.Model.Common;
 9 using LC.Test;
10 using LC.Test.Model;
11 
12 namespace LC.Model
13 {
14     [Message(ConStr = "sql")]
15     public class SYS_User
16     {
17         [PrimaryKey]
18         public string Id { get; set; }
19         public string UserName { get; set; }
20 
21         public Guid? RoleId { get; set; }
22         public Guid? CityId { get; set; }
23         [Guidance(DepandField = "RoleId")]
24         public SYS_Role Role { get; set; }
25 
26         [Guidance(DepandField = "CityId")]
27         public City City { get; set; }
28 
29         public int Gender { get; set; }
30 
31         public bool Deleted { get; set; }
32 
33         public DateTime CreateTime { get; set; }
34     }
35 }
自己动手写ORM(02):Sql生成器实现

相关文章: