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); } } } }