欧美大屁股bbbbxxxx,狼人大香伊蕉国产www亚洲,男ji大巴进入女人的视频小说,男人把ji大巴放进女人免费视频,免费情侣作爱视频

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

C#教程

當(dāng)前位置:主頁(yè) > 軟件編程 > C#教程 >

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

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

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

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

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

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

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

特性能解決什么問題?

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

直接上代碼

namespace CustomerAttribute
{
 /// <summary>
 /// 數(shù)據(jù)庫(kù)主鍵
 /// </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("角色I(xiàn)D")]
 public string RoleId { get; set; }
 }
}
namespace CustomerAttribute
{
 class Program
 {
 /// <summary>
 /// 獲取數(shù)據(jù)庫(kù)主鍵字段
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <returns></returns>
 private static IEnumerable<PropertyInfo> getDbKeyFields<T>()
 {
 // 獲取當(dāng)前類中的公共字段
 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類,我們可以對(duì)類、方法、屬性等元素進(jìn)行特性標(biāo)注

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

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

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

以上就是本文的全部?jī)?nèi)容,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,同時(shí)也希望多多支持我們!

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

如果侵犯了您的權(quán)利,請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)進(jìn)行處理、任何非本站因素導(dǎo)致的法律后果,本站均不負(fù)任何責(zé)任。

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

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