古詩詞大全網 - 成語解釋 - C# 實體屬性添加標簽問題

C# 實體屬性添加標簽問題

那個叫屬性,不叫標簽

using System;

using System.Collections.Generic;

using System.Text;

using System.Data;

namespace MagicStar.Entity.Attribute

{

/// <summary>

/// 將類的屬性與數據庫表中的列相關聯。

/// </summary>

[AttributeUsage(AttributeTargets.Property)]

public sealed class ColumnAttribute : System.Attribute

{

/// <summary>

/// 獲取或設置列的名稱。

/// </summary>

public string ColumnName { get; private set; }

/// <summary>

/// 獲取或設置列的標題。

/// </summary>

public string ColumnCaption { get; private set; }

/// <summary>

/// 獲取或設置列的類型。

/// </summary>

public SqlDbType ColumnType { get; private set; }

/// <summary>

/// 初始化 MagicStar.Entity.ColumnAttribute 類的壹個新實例。

/// </summary>

/// <param name="columnCaption">表或視圖的標題。</param>

/// <param name="columnName">表或視圖的名稱。</param>

/// <param name="columnType">類型。</param>

public ColumnAttribute(string columnName, string columnCaption, SqlDbType columnType)

{

ColumnName = columnName;

ColumnCaption = columnCaption;

ColumnType = columnType;

}

}

}

using System;

using System.Collections.Generic;

using System.Text;

using System.Reflection;

using System.Globalization;

using System.Collections;

using System.Data;

using MagicStar.Entity.Attribute;

using System.ComponentModel;

namespace MagicStar.Entity

{

/// <summary>

/// 實體類的基類。

/// </summary>

public abstract class EntityBase<T> where T:EntityBase<T>,new()

{

IDictionary<string, string> mColumnMapping; //列名與屬性的對應關系。

/// <summary>

/// 默認構造函數。

/// </summary>

public EntityBase()

{

mColumnMapping = new Dictionary<string, string>();

PropertyInfo[] properties = this.GetType().GetProperties();

foreach (PropertyInfo property in properties)

{

//獲取列名與屬性的對應關系。

object[] attributes = property.GetCustomAttributes(typeof(ColumnAttribute), true);

if(attributes.Length!=0)

{

ColumnAttribute attribute=(attributes[0] as ColumnAttribute);

mColumnMapping.Add(attribute.ColumnName, attribute.PropertyName);

}

}

}

/// <summary>

///

/// </summary>

/// <param name="dataTable"></param>

/// <returns></returns>

public IList<T> Parse(DataTable dataTable)

{

IList<T> list = new List<T>();

T entity;

Type entityType = this.GetType();

string propertyName;

foreach (DataRow dataRow in dataTable.Rows)

{

entity = new T();

foreach (DataColumn dataColumn in dataTable.Columns)

{

propertyName = GetPropertyName(dataColumn.ColumnName);

if (propertyName != null)

{

entityType.GetProperty(propertyName).SetValue(entity, dataRow[dataColumn], null);

}

}

list.Add(entity);

}

return list;

}

private string GetPropertyName(string columnName)

{

return this.mColumnMapping.ContainsKey(columnName) ? this.mColumnMapping[columnName] : null;

}

}

}

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using MagicStar.Entity.Attribute;

using System.Data;

using System.ComponentModel;

namespace CTest

{

class Program

{

static void Main(string[] args)

{

DataTable dt = new DataTable();

dt.Columns.Add("dt");

dt.Rows.Add(dt.NewRow());

testentity a = new testentity();

a.Parse(dt);

Console.WriteLine(a.dt);

}

}

class testentity : MagicStar.Entity.EntityBase<testentity>

{

[ColumnAttribute("dt","日期",SqlDbType.DateTime)]

public DateTime dt { get; set; }

}

}