上一节中鄙人通过解析表达式树生成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 { get; set; }
}
public class MessageAttribute : System.Attribute
{
/// <summary>
/// 链接字符串名
/// </summary>
public string ConStr { get; set; }
}
public class PrimaryKeyAttribute : System.Attribute
{
}
|
实体类如下:
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 }