国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - C# - C#實現(xiàn)根據(jù)實體類自動創(chuàng)建數(shù)據(jù)庫表

C#實現(xiàn)根據(jù)實體類自動創(chuàng)建數(shù)據(jù)庫表

2021-12-15 13:05天碼行空 C#

本文主要介紹了C#通過自定義特性實現(xiàn)根據(jù)實體類自動創(chuàng)建數(shù)據(jù)庫表的方法。具有很好的參考價值,需要的朋友一起來看下吧

.Net新手通常容易把屬性(Property)跟特性(Attribute)搞混,其實這是兩種不同的東西

屬性指的類中封裝的數(shù)據(jù)字段;而特性是對類、字段、方法和屬性等元素標注的聲明性信息

如下代碼(Id、Name為User的屬性,[DbKey]為Id的特性)

?
1
2
3
4
5
6
7
8
9
/// <summary>
/// 用戶信息
/// </summary>
public class User
{
 [DbKey]
 public string Id { get; set; }
 public string Name { get; set; }
}

特性分預(yù)定義特性和自定義特性,本節(jié)主要講述自定義特性

特性能解決什么問題?

假如現(xiàn)在需要通過定義一些實體類,動態(tài)創(chuàng)建出對應(yīng)的數(shù)據(jù)庫表,該怎么做呢?

直接上代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
namespace CustomerAttribute
{
 /// <summary>
 /// 數(shù)據(jù)庫主鍵
 /// </summary>
 public class DbKey : Attribute
 {
 public string Description { get; set; }
 public DbKey()
 {
 }
 public DbKey(string description)
 {
 this.Description = description;
 }
 }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
namespace CustomerAttribute
{
 /// <summary>
 /// 用戶信息
 /// </summary>
 public class User
 {
 [DbKey]
 public string Id { get; set; }
 public string Name { get; set; }
 }
 /// <summary>
 /// 用戶角色
 /// </summary>
 public class UserRole
 {
 [DbKey("用戶ID")]
 public string UserId { get; set; }
 [DbKey("角色ID")]
 public string RoleId { get; set; }
 }
}
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
namespace CustomerAttribute
{
 class Program
 {
 /// <summary>
 /// 獲取數(shù)據(jù)庫主鍵字段
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <returns></returns>
 private static IEnumerable<PropertyInfo> getDbKeyFields<T>()
 {
 // 獲取當前類中的公共字段
 var fields = typeof(T).GetProperties();
 // 查找有DbKey特性的字段
 var keyFields = fields.Where(field => (DbKey)Attribute.GetCustomAttribute(field, typeof(DbKey)) != null);
 return keyFields;
 }
 private static string getDescription(PropertyInfo field)
 {
 string result = string.Empty;
 var dbKey = (DbKey)Attribute.GetCustomAttribute(field, typeof(DbKey));
 if (dbKey != null) result = dbKey.Description;
 return result;
 }
 static void Main(string[] args)
 {
 try
 {
 var userKeyFields = getDbKeyFields<User>();
 Console.WriteLine("User表的主鍵為:" + string.Join(",", userKeyFields.Select(field => field.Name)));
 var userRoleKeyFields = getDbKeyFields<UserRole>();
 Console.WriteLine("UserRole表的主鍵為:" + string.Join(",", userRoleKeyFields.Select(field => field.Name)));
 foreach (PropertyInfo field in userRoleKeyFields)
 {
 string description = getDescription(field);
 Console.WriteLine(string.Format("{0}字段的描述信息為:{1}", field.Name, description));
 }
 }
 catch (Exception ex)
 {
 Console.WriteLine(ex);
 }
 finally
 {
 Console.ReadLine();
 }
 }
 }
}

從上邊代碼可以看出來,特性本身也是類,繼承自Attribute類,我們可以對類、方法、屬性等元素進行特性標注

上邊是一個簡單示例,我們可以通過自定義[DbKey]特性,標注在需要設(shè)置主鍵的字段上

需要動態(tài)創(chuàng)建數(shù)據(jù)庫的時候,可以從實體類中解析出表名、字段名、主鍵字段、字段說明等等,然后生成創(chuàng)建數(shù)據(jù)庫表的腳本,動態(tài)創(chuàng)建數(shù)據(jù)庫表

創(chuàng)建數(shù)據(jù)庫的代碼,后邊可以進一步補充

以上就是本文的全部內(nèi)容,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,同時也希望多多支持服務(wù)器之家!

原文鏈接:http://www.cnblogs.com/jh007/p/6124179.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 国产成人一区二区三区 | 啵啵羞羞影院 | 97精品国产一区二区三区 | 中文字幕日韩在线视频 | 久久国产成人 | 伊人精品影院 | 国产精品免费久久久久久久久 | 91久久精品国产91久久 | 九九热精品在线 | 欧美bbbxxx| 国产精品免费av | 亚洲一区二区三区免费视频 | 亚洲精品夜夜夜 | 久久亚洲一区二区三区明星换脸 | 国产精品久久久久久久久久久免费看 | 中文在线一区二区三区 | 日韩免费一区 | 91网站视频在线观看 | 先锋影音av资源站 | 色婷婷激情综合 | 国产一级毛片一级 | 在线观看亚洲成人 | 99精品视频免费观看 | 欧美激情在线精品一区二区三区 | 91精品啪啪 | 精品久久一区二区三区 | 高清xxxx| 久久性 | 欧美视频免费在线 | 91se在线| 麻豆91在线观看 | 这里只有精品视频 | 日韩在线中文字幕 | 日本久久久久久 | 欧美电影免费观看高清 | 99中文字幕 | 欧美一区二区三区在线 | 亚洲一区二区三区 | 亚洲成人av在线播放 | 久久伊99综合婷婷久久伊 | 国产成人免费高清激情视频 |