一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

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

服務器之家 - 編程語言 - C# - C#實現根據實體類自動創建數據庫表

C#實現根據實體類自動創建數據庫表

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

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

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

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

如下代碼(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; }
}

特性分預定義特性和自定義特性,本節主要講述自定義特性

特性能解決什么問題?

假如現在需要通過定義一些實體類,動態創建出對應的數據庫表,該怎么做呢?

直接上代碼

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
namespace CustomerAttribute
{
 /// <summary>
 /// 數據庫主鍵
 /// </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>
 /// 獲取數據庫主鍵字段
 /// </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]特性,標注在需要設置主鍵的字段上

需要動態創建數據庫的時候,可以從實體類中解析出表名、字段名、主鍵字段、字段說明等等,然后生成創建數據庫表的腳本,動態創建數據庫表

創建數據庫的代碼,后邊可以進一步補充

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

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

延伸 · 閱讀

精彩推薦
  • C#WPF 自定義雷達圖開發實例教程

    WPF 自定義雷達圖開發實例教程

    這篇文章主要介紹了WPF 自定義雷達圖開發實例教程,本文介紹的非常詳細,具有參考借鑒價值,需要的朋友可以參考下...

    WinterFish13112021-12-06
  • C#C#通過KD樹進行距離最近點的查找

    C#通過KD樹進行距離最近點的查找

    這篇文章主要為大家詳細介紹了C#通過KD樹進行距離最近點的查找,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    帆帆帆6112022-01-22
  • C#Unity3D實現虛擬按鈕控制人物移動效果

    Unity3D實現虛擬按鈕控制人物移動效果

    這篇文章主要為大家詳細介紹了Unity3D實現虛擬按鈕控制人物移動效果,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一...

    shenqingyu060520232410972022-03-11
  • C#C#實現XML文件讀取

    C#實現XML文件讀取

    這篇文章主要為大家詳細介紹了C#實現XML文件讀取的相關代碼,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    Just_for_Myself6702022-02-22
  • C#C#裁剪,縮放,清晰度,水印處理操作示例

    C#裁剪,縮放,清晰度,水印處理操作示例

    這篇文章主要為大家詳細介紹了C#裁剪,縮放,清晰度,水印處理操作示例,具有一定的參考價值,感興趣的小伙伴們可以參考一下...

    吳 劍8332021-12-08
  • C#深入解析C#中的交錯數組與隱式類型的數組

    深入解析C#中的交錯數組與隱式類型的數組

    這篇文章主要介紹了深入解析C#中的交錯數組與隱式類型的數組,隱式類型的數組通常與匿名類型以及對象初始值設定項和集合初始值設定項一起使用,需要的...

    C#教程網6172021-11-09
  • C#C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    C# 實現對PPT文檔加密、解密及重置密碼的操作方法

    這篇文章主要介紹了C# 實現對PPT文檔加密、解密及重置密碼的操作方法,非常不錯,具有參考借鑒價值,需要的朋友可以參考下...

    E-iceblue5012022-02-12
  • C#C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題實例

    這篇文章主要介紹了C#設計模式之Visitor訪問者模式解決長隆歡樂世界問題,簡單描述了訪問者模式的定義并結合具體實例形式分析了C#使用訪問者模式解決長...

    GhostRider9502022-01-21
主站蜘蛛池模板: 精品日本一区二区 | 公妇乱淫在线播放免费观看 | 日韩欧美一区二区三区中文精品 | 饭冈加奈子在线播放观看 | 99久热只有精品视频免费观看17 | 苍井空色欲迷墙 | 爽好舒服使劲添高h视频 | 性导航h| 亚洲欧美韩国日产综合在线 | 男生和女生搞逼逼 | 亚洲国产欧美另类va在线观看 | 色老板美国在线观看 | 国产乱人乱精一区二区视频密 | 青青青在线视频播放 | 沉香如屑西瓜视频免费观看完整版 | 99视频在线观看视频 | 亚洲 制服 欧美 中文字幕 | 脱女学小内内摸出水网站免费 | 香蕉久久夜色精品国产小优 | 亚洲国产成人精品不卡青青草原 | 99国产精品久久久久久久... | 新影音先锋男人色资源网 | 国产成人精品本亚洲 | 青草午夜精品视频在线观看 | 给我免费观看的视频在线播放 | 婷婷在线成人免费观看搜索 | 91麻豆精品国产自产在线 | 国产精品一区牛牛影视 | 日韩每日更新 | 九九热免费在线观看 | 成年性香蕉漫画在线观看 | 97成网| ova巨公主催眠1在线观看 | 国产成+人+综合+亚洲不卡 | 国产成人精品999在线 | 我的妹妹最近有点怪在线观看 | 无耻之徒第十一季在线观看 | 女人和男人搞鸡 | 日本视频免费在线 | 99精品免费观看 | 亚洲啊v|