日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Gentle中的数据表实体类相关自定义属性的设置和获得

發布時間:2023/12/19 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Gentle中的数据表实体类相关自定义属性的设置和获得 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.自定義 表名屬性 TableNameAttribute
2.自定義 主鍵屬性 PrimaryKeyAttribute
3.自定義 列名屬性 TableColumnAttribute
4.數據表person對應的實體類person.cs
5.獲得person.cs類型實體 對應的表名及字段名

=========================================
下面的屬性代碼文件 都直接建立在App_Code下 以方便使用

1.自定義 表名屬性 TableNameAttribute
------------------------------------


using?System;

/**////?<summary>
///?TableNameAttribute?的摘要說明
///?</summary>


[AttributeUsage(?AttributeTargets.Class,?AllowMultiple
=false,?Inherited=true?)]
public?sealed?class?TableNameAttribute?:?Attribute
{
????
private?string?name;
????
private?string?schema;
????
//private?CacheStrategy?cacheStrategy?=?GentleSettings.DefaultCacheStrategy;

????
/**////?<summary>
????
///?The?constructor?for?the?TableName?attribute.
????
///?</summary>
????
///?<param?name="name">The?name?of?the?database?table?used?to?store?instances?of?this?class.</param>

????public?TableNameAttribute(?string?name?)
????
{
????????
this.name?=?name;
????}


????
/**////?<summary>
????
///?The?constructor?for?the?TableName?attribute.
????
///?</summary>
????
///?<param?name="name">The?name?of?the?database?table?used?to?store?instances?of?this?class.</param>
????
///?<param?name="strategy">The?cache?stratgey?to?use?for?instances?of?this?type.?<see?
????///?cref="CacheStrategy"/>?for?a?list?of?available?options.</param>

????//public?TableNameAttribute(?string?name,?CacheStrategy?strategy?)
????
//{
????
//????this.name?=?name;
????
//????this.cacheStrategy?=?strategy;
????
//}

????
/**////?<summary>
????
///?The?name?of?the?database?table?used?to?store?instances?of?this?class.
????
///?</summary>

????public?string?Name
????
{
????????
get?{?return?name;?}
????}


????
/**////?<summary>
????
///?The?optional?schema?name?with?which?to?prefix?the?table?name?in?queries.
????
///?This?value?overrides?the?default?schema?definition?(if?present)?in?the
????
///?configuration?file.?Note:?this?property?is?currently?unused.?
????
///?</summary>

????public?string?Schema
????
{
????????
get?{?return?schema;?}
????????
set?{?schema?=?value;?}
????}


????
/**//////?<summary>
????
/////?The?cache?behavior?for?objects?of?this?type.?<see?cref="CacheStrategy"/>?
????
/////?for?a?list?of?available?options.
????
/////?</summary>

????//public?CacheStrategy?CacheStrategy
????
//{
????
//????get?{?return?cacheStrategy;?}
????
//????set?{?cacheStrategy?=?value;?}
????
//}
}


2.自定義 主鍵屬性 PrimaryKeyAttribute
------------------------------------

using?System;

/**////?<summary>
///?PrimaryKeyAttribute?的摘要說明
///?</summary>

[AttributeUsage(AttributeTargets.Property?|?AttributeTargets.Field,?AllowMultiple?=?true,?Inherited?=?true)]
public?sealed?class?PrimaryKeyAttribute?:?Attribute
{
????
private?bool?autoGenerated?=?false;

????
/**////?<summary>
????
///?Set?this?property?to?true?for?primary?keys?that?are?automatically?assigned
????
///?by?the?database?on?insert?(identity?columns?in?SQL?server?terminology).?
????
///?</summary>

????public?bool?AutoGenerated
????
{
????????
get?{?return?autoGenerated;?}
????????
set?{?autoGenerated?=?value;?}
????}

}


3.自定義 列名屬性 TableColumnAttribute
--------------------------------------

using?System;
using?System.Data;

/**////?<summary>
///?TableColumnAttribute?的摘要說明
///?</summary>

[AttributeUsage(?AttributeTargets.Property?|?AttributeTargets.Field,?AllowMultiple=false,?Inherited=true?)]
public?class?TableColumnAttribute?:?Attribute
{
????
private?string?name;
????
private?bool?notNull;
????
private?int?size;
????
private?bool?hasDbType?=?false;?//?true?when?DbType?property?has?been?set
????private?long?dbType;
????
private?object?nullValue?=?null;
????
private?bool?handleEnumAsString?=?false;
????
private?bool?isReadOnly?=?false;
????
private?bool?isUpdateAfterWrite?=?false;

????
/**////?<summary>
????
///?Constructor?for?table?columns?that?are?named?after?their?property?counterpart
????
///?and?whose?value?cannot?be?null.
????
///?</summary>

????public?TableColumnAttribute()
????????:?
this(null,?true)
????
{
????}


????
/**////?<summary>
????
///?Constructor?for?table?columns?that?are?named?after?their?property?counterpart.
????
///?</summary>
????
///?<param?name="notNull">A?boolean?telling?whether?null?values?are?allowed?in?the?database</param>

????public?TableColumnAttribute(bool?notNull)
????????:?
this(null,?notNull)
????
{
????}


????
/**////?<summary>
????
///?Constructor?for?table?columns?whose?value?cannot?be?null.
????
///?</summary>
????
///?<param?name="name">The?name?of?the?database?column</param>

????public?TableColumnAttribute(string?name)
????????:?
this(name,?true)
????
{
????}


????
/**////?<summary>
????
///?Constructor?for?table?columns.
????
///?</summary>
????
///?<param?name="name">The?name?of?the?database?column</param>
????
///?<param?name="notNull">A?boolean?telling?whether?null?values?are?allowed?in?the?database</param>

????public?TableColumnAttribute(string?name,?bool?notNull)
????
{
????????
this.name?=?name;
????????
this.notNull?=?notNull;
????}


????
/**////?<summary>
????
///?The?name?of?the?database?column?for?storing?the?property?decorated?with?this?attribute.
????
///?</summary>

????public?string?Name
????
{
????????
get?{?return?name;?}
????}


????
/**////?<summary>
????
///?This?property?(defaults?to?true)?can?be?used?to?specify?whether?NULL?values?are
????
///?allowed?in?the?database.?This?allows?the?framework?to?fail?early?if?a?constraint
????
///?is?violated.
????
///?</summary>

????public?bool?NotNull
????
{
????????
get?{?return?notNull;?}
????????
set?{?notNull?=?value;?}
????}


????
/**////?<summary>
????
///?The?database?type?of?the?field?in?the?database.?Beware?that?the?DbType?enumeration
????
///?values?are?NOT?the?ones?used?by?the?individual?providers.?Gentle?does?NOT?convert
????
///?the?DbType?to?a?"best?match"?for?the?provider.?It?is?therefore?recommended?that?
????
///?you?use?the?DatabaseType?below?until?a?better?type?definition?system?is?available.
????
///?</summary>

????[Obsolete("Please?use?DatabaseType?instead.")]
????
public?DbType?DbType
????
{
????????
get?{?return?(DbType)dbType;?}
????????
set
????????
{
????????????hasDbType?
=?true;
????????????dbType?
=?(long)value;
????????}

????}


????
/**////?<summary>
????
///?The?database?type?of?the?field?in?the?database.?Convert?the?actual?database?type
????
///?enumeration?to?a?long?by?casting?it?in?the?declaration.
????
///?</summary>

????public?long?DatabaseType
????
{
????????
get?{?return?dbType;?}
????????
set
????????
{
????????????hasDbType?
=?true;
????????????dbType?
=?value;
????????}

????}


????
/**////?<summary>
????
///?The?size?or?length?of?the?field?in?the?database.?String?properties?will?be?clipped
????
///?to?fit.
????
///?This?feature?will?obsoleted?once?Gentle?is?capable?of?extracting?type?and?size?
????
///?information?directly?from?the?database.?If?specified,?the?values?must?match
????
///?those?extracted?from?the?database?(when?implemented).
????
///?</summary>

????public?int?Size
????
{
????????
get?{?return?size;?}
????????
set?{?size?=?value;?}
????}


????
/**////?<summary>
????
///?This?property?indicates?whether?a?DbType?was?specified.?This?construct?is?necessary
????
///?because?the?DbType?enum?has?no?value?for?undefined.
????
///?</summary>

????public?bool?HasDbType
????
{
????????
get?{?return?hasDbType;?}
????}


????
/**////?<summary>
????
///?Obsolete,?use?NullValue?instead.
????
///?</summary>

????[Obsolete("Use?NullValue?instead.")]
????
public?object?MagicValue
????
{
????????
get?{?return?nullValue;?}
????????
set?{?nullValue?=?value;?}
????}


????
/**////?<summary>
????
///?This?value?of?this?property?is?used?when?a?column?is?NotNull?and?the?property?value
????
///?is?null.??If?this?is?undefined?the?framework?will?throw?an?error?for?NotNull?columns
????
///?whose?values?are?null.
????
///?</summary>

????public?object?NullValue
????
{
????????
get?{?return?nullValue;?}
????????
set?{?nullValue?=?value;?}
????}


????
NullValue?Helper?Properties?for?VB.NET?Users#region?NullValue?Helper?Properties?for?VB.NET?Users
????
/**////?<summary>
????
///?This?property?allows?type-safe?setting?of?the?NullValue?for?VB?users.
????
///?</summary>

????public?int?NullValue_int
????
{
????????
set?{?NullValue?=?value;?}
????}

????
/**////?<summary>
????
///?This?property?allows?type-safe?setting?of?the?NullValue?for?VB?users.
????
///?</summary>

????public?NullOption?NullValue_opt
????
{
????????
set?{?NullValue?=?value;?}
????}

????
#endregion


????
/**////?<summary>
????
///?This?value?indicates?that?the?column?should?not?be?set?on?insert?and?update.?It?is
????
///?primarily?useful?for?columns?that?are?set?internally?by?the?database.
????
///?</summary>

????public?bool?IsReadOnly
????
{
????????
get?{?return?isReadOnly;?}
????????
set?{?isReadOnly?=?value;?}
????}


????
/**////?<summary>
????
///?This?value?indicates?that?the?column?must?be?read?after?each?insert?and?update.?It?is
????
///?primarily?useful?for?columns?that?are?set?internally?by?the?database.?Note?that?using
????
///?this?feature?(by?setting?this?to?true?for?any?column)?will?significantly?impact?
????
///?performance?for?the?worse,?as?for?every?update/insert?another?select?will?be?
????
///?performed.?Also,?fields?will?be?updated?using?reflection?after?select,?which?is?also
????
///?quite?slow?(depending?on?the?number?of?columns).
????
///?</summary>

????public?bool?IsUpdateAfterWrite
????
{
????????
get?{?return?isUpdateAfterWrite;?}
????????
set?{?isUpdateAfterWrite?=?value;?}
????}


????
/**////?<summary>
????
///?If?member?which?has?this?attribute?attached?is?enum?then?this?property
????
///?indicates?wheter?framework?saves?it?as?string?or?as?integer.
????
///?Default?is?false,?ie?enums?are?saved?as?integers
????
///?</summary>

????public?bool?HandleEnumAsString
????
{
????????
get?{?return?handleEnumAsString;?}
????????
set?{?handleEnumAsString?=?value;?}
????}

}


public?enum?NullOption
{
????
/**////?<summary>
????
///?&lt;type&gt;.MinValue?will?be?stored?as?NULL,?and?NULL?will?be?read?as?&lt;type&gt;.MinValue.
????
///?</summary>

????MinValue,
????
/**////?<summary>
????
///?&lt;type&gt;.MaxValue?will?be?stored?as?NULL,?and?NULL?will?be?read?as?&lt;type&gt;.MaxValue.
????
///?</summary>

????MaxValue,
????
/**////?<summary>
????
///?0?(or?the?equivalent?for?other?numeric?types)?will?be?stored?as?NULL,?and?NULL?will?be?read?as?0.
????
///?</summary>?This?value?can?only?be?used?with?numeric?types?(such?as?decimal).

????Zero,
????
/**////?<summary>
????
///?Guid.Empty?will?be?stored?as?NULL,?and?NULL?will?be?read?as?Guid.Empty.?This?value?can?only?be
????
///?used?with?Guid?fields.
????
///?</summary>

????EmptyGuid
}

4.數據表person對應的實體類person.cs
------------------------------------

using?System;
using?System.Data;
using?System.Configuration;
using?System.Web;
using?System.Web.Security;
using?System.Web.UI;
using?System.Web.UI.WebControls;
using?System.Web.UI.WebControls.WebParts;
using?System.Web.UI.HtmlControls;

/**////?<summary>
///?person?的摘要說明
///?</summary>


[TableName(
"person")]
public?class?person
{
????
public?person()
????
{
????}


????
//[TableColumn("personID",?NotNull?=?true),?PrimaryKey]
????protected?int?_personID;
????
//[TableColumn("personName",?NotNull?=?true)]
????protected?string?_personName?=?String.Empty;

????[TableColumn(
"personID",?NotNull?=?true),?PrimaryKey]
????
public?int?PersonID
????
{
????????
get?{?return?_personID;?}
????????
set?{?_personID?=?value;?}
????}


????[TableColumn(
"personName",?NotNull?=?true)]
????
public?string?PersonName
????
{
????????
get?{?return?_personName;?}
????????
set?{?_personName?=?value;?}
????}

}


5.獲得person.cs類型實體 對應的表名及字段名
------------------------------------------
protected?void?Button1_Click(object?sender,?EventArgs?e)
{
????person?aPerson?
=?new?person();
????aPerson.PersonID?
=?22;
????aPerson.PersonName?
=?"zhangsan";

????Type?aType?
=?aPerson.GetType();

????
//類實體公開屬性對應的列名屬性
????PropertyInfo[]?aPropertyInfos?=?aType.GetProperties();
????
string?strPublicProperty?=?"?";
????
for?(int?i?=?0;?i?<?aPropertyInfos.Length;?i++)
????
{
????????PropertyInfo?aPropertyInfo?
=?(PropertyInfo)aPropertyInfos[i];
????????strPublicProperty?
+=?i.ToString()?+?"?:?實體屬性名?"?+?aPropertyInfo.Name;
????????strPublicProperty?
+=?"?對應值?"?+?aPropertyInfo.GetValue(aPerson,?null).ToString()?+?"?";
????????
object[]?attrs?=?aPropertyInfo.GetCustomAttributes(typeof(TableColumnAttribute),?true);
????????
for?(int?m?=?0;?m?<?attrs.Length;?m++)
????????
{
????????????strPublicProperty?
+=?"?對應列名?"?+?((TableColumnAttribute)attrs[m]).Name;
????????}

????}

????
this.TextBox1.Text?=?strPublicProperty;


????
//FieldInfo[]?aFieldInfos?=?aType.GetFields();
????
//string?strPublicField?=?"?";
????
//for?(int?j?=?0;?j?<?aFieldInfos.Length;?j++)
????
//{
????
//????FieldInfo?aFieldInfo?=?(FieldInfo)aFieldInfos[j];
????
//????strPublicField?+=?j.ToString()?+?"?:?"?+?aFieldInfo.Name?+?"?";
????
//}
????
//this.TextBox2.Text?=?strPublicField;
????

????
//類實體對應的表名屬性
????string?strTablePKName?=?"?";
????
object[]?attrsAA?=?aType.GetCustomAttributes(typeof(TableNameAttribute),?true);
????
for?(int?n?=?0;?n?<?attrsAA.Length;?n++)
????
{
????????strTablePKName?
+=?"?"?+?((TableNameAttribute)attrsAA[n]).Name;
????}


????
//類實體對應的主鍵屬性
????MemberInfo[]?aMemberInfos?=?aType.GetMembers(BindingFlags.Public?|?BindingFlags.NonPublic?|?BindingFlags.Instance);
????
string?strMemberInfo?=?"?";
????
for?(int?k?=?0;?k?<?aMemberInfos.Length;?k++)
????
{
????????MemberInfo?aM?
=?aMemberInfos[k];
????????
object[]?attrs?=?aM.GetCustomAttributes(typeof(PrimaryKeyAttribute),?true);
????????
for?(int?m?=?0;?m?<?attrs.Length;?m++)
????????
{
????????????strTablePKName?
+=?"?主鍵?"?+?aM.Name;
????????}

????}


????
this.TextBox2.Text?=?strTablePKName;
???
}

總結

以上是生活随笔為你收集整理的Gentle中的数据表实体类相关自定义属性的设置和获得的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。