/// <summary> /// Gets the <see cref="DataModelColumnAttribute"/> having the /// specified name and naming type. /// </summary> /// <param name="propertyNameOrColumnName"></param> /// <returns></returns> public DataModelColumnAttribute this[string propertyNameOrColumnName] { get { if (FieldMappings.ContainsKey(propertyNameOrColumnName)) { return(FieldMappings[propertyNameOrColumnName]); } var ret = GetFieldMappingByDbColumnName(propertyNameOrColumnName); if (ret != null) { return(ret); } if (ForeignModelMappings.ContainsKey(propertyNameOrColumnName)) { if (FieldMappings.ContainsKey(ForeignModelMappings[propertyNameOrColumnName].TargetMember.Name)) { return(FieldMappings[ForeignModelMappings[propertyNameOrColumnName].TargetMember.Name]); } var foreignMapping = ForeignModelMappings[propertyNameOrColumnName]; var mapping = FieldMappings.ToList().Find(fm => fm.Value.ColumnName == foreignMapping.LocalColumn).Value; return(mapping); } return(null); } }
private void LoadForeignDataModelMappingAttributes() { var hierarchy = new List <Type>(); var t = this.EntityType; while (t != typeof(DataModel) && t != typeof(object)) { hierarchy.Insert(0, t); t = t.BaseType; } // walk up hierarchy foreach (var type in hierarchy) { var pis = type.GetProperties(); var fis = type.GetFields(); var mis = new Dictionary <MemberInfo, Type>(); foreach (var fi in fis) { mis.Add(fi, fi.FieldType); // fee fi fo fum } foreach (var pi in pis) { mis.Add(pi, pi.PropertyType); } foreach (var mi_kvp in mis) { var mi = mi_kvp.Key; var miType = mi_kvp.Value; var attrs = mi.GetCustomAttributes(typeof(ForeignDataModelAttribute), false); foreach (ForeignDataModelAttribute attr in attrs) { attr.TargetMember = mi; attr.TargetMemberType = miType; if (ForeignModelMappings.ContainsKey(mi.Name) && !attr.ClearBaseObjectMapping) { attr.CopyDeltaTo(ForeignModelMappings[mi.Name]); } else { ForeignModelMappings[mi.Name] = attr; } } } } }