using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
namespace Ant.ORM
{
public class DataFieldMeta
{
PropertyInfo pinfo;
FiledMetaData md;
///
///
///
public DataFieldMeta(PropertyInfo info, FiledMetaData data)
{
pinfo = info;
md = data;
}
///
/// 获取属性值
///
///
public FiledMetaData GetAllMetaData()
{
GetDataFieldMeta();
GetReferenceMeta();
GetChildMeta();
return md;
}
///
///
///
///
public void GetDataFieldMeta()
{
///也能实现两种写法
// if (pinfo.IsDefined(typeof(DataFieldColumnAttribute), false))
//{
// var dfa = (DataFieldColumnAttribute)pinfo.GetCustomAttributes(typeof(DataFieldColumnAttribute), false)[0];
DataFieldColumnAttribute dfa = Attribute.GetCustomAttribute(pinfo, typeof(DataFieldColumnAttribute)) as DataFieldColumnAttribute;
if (dfa.IfNotNull())
{
DataFieldMetaData dfMetaData = new DataFieldMetaData();
dfMetaData.ColumnName = dfa.Name;
dfMetaData.ColumnType = dfa.DbType;
dfMetaData.DefaultValue = dfa.DefaultValue;
dfMetaData.IsPrimaryKey = dfa.IsPrimaryKey;
dfMetaData.IsForeignKey = dfa.IsForeignKey;
dfMetaData.IsNullable = dfa.IsNullable;
dfMetaData.IsAutoincrement = dfa.IsAutoincrement;
dfMetaData.PropertyName = pinfo.Name;
dfMetaData.PropertyType = pinfo.PropertyType;
//md.FieldMeteDatas.Add(pinfo.Name, dfMetaData);
//if (dfa.IsPrimaryKey && string.IsNullOrEmpty(md.PrimaryKey))
// md.PrimaryKey = pinfo.Name;
}
}
///
/// 获取扩展属性
///
///
public void GetReferenceMeta()
{
ReferenceAttribute dfa = Attribute.GetCustomAttribute(pinfo, typeof(ReferenceAttribute)) as ReferenceAttribute;
if (dfa.IfNotNull())
{
ReferenceMataData f = new ReferenceMataData();
f.Key = dfa.Key;
f.DataType = dfa.DataType;
f.ForeignKey = dfa.ForeignKey;
f.ForeignTable = dfa.ForeignTable;
f.MainKey = dfa.MainKey;
f.ShowField = dfa.ShowField;
//md.ReferenceObjects.Add(f.Key, f);
}
}
///
/// 获取关联对象
///
///
public void GetChildMeta()
{
ChildAttribute dfa = Attribute.GetCustomAttribute(pinfo, typeof(ChildAttribute)) as ChildAttribute;
if (dfa.IfNotNull())
{
//关联对象
ChildMataData cf = new ChildMataData();
//if (md.ChildObjects.ContainsKey(dfa.Key))
//{
// cf = md.ChildObjects[dfa.Key];
// cf.ShowField.Add(dfa.ShowField);
//}
//else
//{
// cf.MainTable = dfa.MainTable;
// cf.DataType = dfa.DataType;
// cf.ParentTableFields = dfa.ParentTableFields;
// cf.ChildTableFields = dfa.ChildTableFields;
// cf.ChildTable = dfa.ChildTable;
// cf.Key = dfa.Key;
// cf.ShowField.Add(dfa.ShowField);
//}
//md.ChildObjects.Add(cf.Key, cf);
}
}
}
}