若还不清楚NBear中如何实现ORM,请先阅读Teddy所写的《
NBearV3 Step by Step教程——ORM篇》。通常在一些应用中所使用到的字段不仅仅来左一个数据表,如一个文章列表GirdView中,使用到了Content、User、Category三个表中的项。
关系图如下:

Content.cs
1
public interface Content : Entity
2
{
3
[PrimaryKey]
4
int ID
5
{
6
get;
7
}
8
9
[ManyToManyQuery(typeof(ContentTag), LazyLoad = true)]
10
Tag[] Tags
11
{ get;set; }
12
13
[FkReverseQuery(LazyLoad = false)]
14
Category Category
15
{
16
get;
17
set;
18
}
19
20
DateTime? ModifiedDate
21
{
22
get;
23
set;
24
}
25
26
[FkReverseQuery(LazyLoad = false)]
27
[MappingName("UserID")]
28
User User
29
{
30
get;
31
set;
32
}
33
34
[SqlType("nvarchar(100)")]
35
string Title
36
{
37
get;
38
set;
39
}
40
41
[SqlType("ntext")]
42
string Body
43
{
44
get;
45
set;
46
}
47
48
[SqlType("ntext")]
49
string Summary
{ get;set;}
50
51
[SqlType("nvarchar(250)")]
52
string Link
53
{
54
get;
55
set;
56
}
57
58
int TopSort
59
{
60
get;
61
set;
62
}
63
64
bool Visible
65
{
66
get;
67
set;
68
}
69
70
int Hits
71
{
72
get;
73
set;
74
}
75
76
[SqlType("nvarchar(50)")]
77
string IP
78
{
79
get;
80
set;
81
}
82
83
bool AllowComment
84
{
85
get;
86
set;
87
}
88
89
int CommentCount
90
{
91
get;
92
set;
93
}
94
95
[FkQuery("Content", OrderBy = "{ID} DESC", Contained = true, LazyLoad = true)]
96
Comment[] Comments
97
{
98
get;
99
set;
100
}
101
}

User.cs
1
public interface User : Entity
2
{
3
[PrimaryKey]
4
int ID
5
{
6
get;
7
}
8
9
[SqlType("nvarchar(50)")]
10
string Name
11
{
12
get;
13
set;
14
}
15
16
[SqlType("nvarchar(50)")]
17
string Email
18
{
19
get;
20
set;
21
}
22
23
[FkQuery("UserID", Contained = true, LazyLoad = true)]
24
UserProfile Profile
25
{
26
get;
27
set;
28
}
29
30
[ManyToManyQuery(typeof(UserGroup), OrderBy = "{Name} DESC", LazyLoad = true)]
31
[SerializationIgnore]
32
Group[] Groups
33
{
34
get;
35
set;
36
}
37
38
[ManyToManyQuery(typeof(UserRole), OrderBy = "{Name} DESC", LazyLoad = true)]
39
[SerializationIgnore]
40
Role[] Roles
41
{
42
get;
43
set;
44
}
45
46
[FkQuery("UserID", OrderBy = "{Name} DESC", Contained = true, LazyLoad = true)]
47
[SerializationIgnore]
48
Tag[] Tags
49
{
50
get;
51
set;
52
}
53
54
[FkQuery("User", OrderBy = "{ID} DESC", Contained = true, LazyLoad = true)]
55
[SerializationIgnore]
56
Content[] Contents
57
{
58
get;
59
set;
60
}
61
62
[FkQuery("User", OrderBy = "{ID} DESC", Contained = true, LazyLoad = true)]
63
[SerializationIgnore]
64
Comment[] Comments
65
{
66
get;
67
set;
68
}
69
70
[FkQuery("User", OrderBy = "{Name} DESC", Contained = true, LazyLoad = true)]
71
[SerializationIgnore]
72
Category[] Categories
73
{
74
get;
75
set;
76
}
77
78
UserStatus Status
79
{
80
get;
81
set;
82
}
83
84
[SqlType("nvarchar(50)")]
85
string LogOnName
86
{
87
get;
88
set;
89
}
90
91
[SqlType("nvarchar(50)")]
92
string Password
93
{
94
get;
95
set;
96
}
97
98
[SqlType("nvarchar(100)")]
99
string PassQuestion
100
{
101
get;
102
set;
103
}
104
105
[SqlType("nvarchar(100)")]
106
string PassAnswer
107
{
108
get;
109
set;
110
}
111
112
[FkQuery("UserID", Contained = true, LazyLoad = true)]
113
UserPhone[] Phones
114
{
115
get;
116
set;
117
}
118
119
[SqlType("nvarchar(30)")]
120
string No
121
{
122
get;
123
set;
124
}
125
126
[SqlType("nvarchar(4)")]
127
string Sex
128
{
129
get;
130
set;
131
}
132
133
DateTime? Birthday
134
{
135
get;
136
set;
137
}
138
139
DateTime? CreateDate
140
{
141
get;
142
set;
143
}
144
145
DateTime? LogOnDate
146
{
147
get;
148
set;
149
}
150
151
int LogOnCount
152
{
153
get;
154
set;
155
}
156
}

Category.cs
1
public interface Category : Entity
2
{
3
[PrimaryKey]
4
int ID
5
{
6
get;
7
}
8
9
[SqlType("nvarchar(50)")]
10
string Name
11
![]()