示例#1
0
 /// <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);
     }
 }
示例#2
0
        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;
                        }
                    }
                }
            }
        }