我只是在玩屬性,其中包含有關特定數據庫字段的一些信息。我已經創建了FieldAttribute類,它具有默認信息,如名稱,類型等。反射,屬性和屬性 - 學習ORM體系結構
我的問題是:是否可以創建一個方法來檢索此信息並嵌入到屬性中?我想我可以用代碼更好地溝通:
[AttributeUsage(AttributeTargets.Property,AllowMultiple=false,Inherited=true)]
public class FieldAttribute:Attribute
{
protected string _FieldName;
protected esriFieldType _FieldType;
protected bool _NotNullable;
protected bool _IsPrimary;
protected bool _IsForeign;
protected int _Index;
public virtual string FieldName
{
get { return this._FieldName; }
set { this._FieldName = value; }
}
public virtual esriFieldType FieldType
{
get { return this._FieldType; }
set { this._FieldType = value; }
}
public virtual bool NotNullable
{
get { return this._NotNullable; }
set { this._NotNullable = value; }
}
public virtual int Index
{
get { return this._Index; }
set { this._Index = value; }
}
public FieldAttribute(string fieldName, esriFieldType fieldType,int position)
{
this.FieldName = fieldName;
this.FieldType = fieldType;
_IsPrimary = false;
_IsForeign = false;
Index = position;
}
}
// my main abstract class
public abstract class ObjectWrapper:IObjectWrapper
{
protected int _ObjectId;
protected IObject _UnderlyingObject;
public virtual IObject UnderlyingObject
{
get { return this._UnderlyingObject; }
}
public virtual int ObjectId
{
get { return this._ObjectId; }
}
public virtual void Store()
{
try
{
_UnderlyingObject.Store();
}
catch (COMException comEx)
{
// log com exception
}
catch (Exception ex)
{
// log
}
}
// this method retrieves field information
private FieldAttribute GetFieldAttribute(string propertyName)
{
FieldAttribute propertyAttribute = null;
try
{
PropertyInfo propInfo = this.GetType().GetProperty(propertyName);
object[] attributes = propInfo.GetCustomAttributes(typeof(FieldAttribute), true);
if (attributes.Length == 1)
propertyAttribute = (FieldAttribute)attributes[0];
}
catch (AmbiguousMatchException ambEx)
{
// log
}
catch (ArgumentException argEx)
{
// log
}
return propertyAttribute;
}
}
// my concrete class
public class Foo:ObjectWrapper
{
[Field("FOO_NAME",esriFieldType.esriFieldTypeString,1);
public string FooName { get; set; }
[Field("FOO_AGE",esriFieldType.esriFieldTypeInteger,2);
public int FooAge { get; set; }
}
我想在這裏做的是建立一個通用的GetMethod,使用字段屬性值從數據庫/ _underlyingObject獲取數據,只是「填寫的」 EG:
當我調用Foo.FooName時,getter將檢查屬性,並將getter名稱傳遞給GetFieldAttribute方法。
我該如何做到這一點?
這個想法是,當有一個小框架,這將成爲一個簡單的「ESRI數據庫提供者」的數據。
我真的很抱歉,我無法正確解釋這一點。
感謝您的幫助。
G.
感覺這需要說:我希望這是你自己的好奇心,而不是在生產系統中使用。 – 2011-01-13 21:28:05