雷火电竞-中国电竞赛事及体育赛事平台

歡迎來到入門教程網(wǎng)!

C#教程

當前位置:主頁 > 軟件編程 > C#教程 >

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

來源:本站原創(chuàng)|時間:2020-01-10|欄目:C#教程|點擊:

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

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

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

/// <summary>
/// 用戶信息
/// </summary>
public class User
{
 [DbKey]
 public string Id { get; set; }
 public string Name { get; set; }
}

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

特性能解決什么問題?

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

直接上代碼

namespace CustomerAttribute
{
 /// <summary>
 /// 數(shù)據(jù)庫主鍵
 /// </summary>
 public class DbKey : Attribute
 {
 public string Description { get; set; }
 public DbKey()
 {
 }
 public DbKey(string description)
 {
 this.Description = description;
 }
 }
}
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; }
 }
}
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]特性,標注在需要設置主鍵的字段上

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

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

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

上一篇:C#使用UdpClient類進行簡單通信的實例

欄    目:C#教程

下一篇:C#獲取CPU處理器核心數(shù)量的方法

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

本文地址:http://www.jygsgssxh.com/a1/C_jiaocheng/6085.html

網(wǎng)頁制作CMS教程網(wǎng)絡編程軟件編程腳本語言數(shù)據(jù)庫服務器

如果侵犯了您的權利,請與我們聯(lián)系,我們將在24小時內進行處理、任何非本站因素導致的法律后果,本站均不負任何責任。

聯(lián)系QQ:835971066 | 郵箱:835971066#qq.com(#換成@)

Copyright © 2002-2020 腳本教程網(wǎng) 版權所有