Mapping class that represents a property mapped to a column.
Inheritance: IColumnMapping
        private static IEnumerable<IColumnMapping> DefaultPropertySelector(Type type, IEnumerable<MemberInfo> memberInfos)
        {
            var props = from prop in type.GetProperties(BindingFlags.Instance | BindingFlags.Public)
                        where !memberInfos.Contains(prop)
                        where !Attribute.IsDefined(prop, typeof(NotMappedAttribute))
                        let attr = (ColumnAttribute)Attribute.GetCustomAttribute(prop, typeof(ColumnAttribute)) ?? new ColumnAttribute()
                        select new { prop, attr };

            var toReturn = new List<IColumnMapping>();

            foreach(var prop in props) {
                var map = new ColumnMapping(prop.prop);
                CopyAttributeToMapping(prop.attr, map);
                toReturn.Add(map);
            }

            return toReturn;
        }
        private static IEnumerable<IColumnMapping> DefaultPrimaryKeySelector(Type type)
        {
            var props = type.GetProperties(BindingFlags.Public | BindingFlags.Instance);

            var idProps = (from prop in props
                          let attr = (ColumnAttribute)Attribute.GetCustomAttribute(prop, typeof(ColumnAttribute))
                          where attr != null
                          where attr.IsPrimaryKey
                          select new { prop, attr }).ToList();

            if(idProps.Count == 0) {
                var idProperty = type.GetProperty("Id", BindingFlags.Instance | BindingFlags.Public);

                if (idProperty == null || !idProperty.CanWrite || !idProperty.CanRead) {
                    throw new Exception(string.Format("Could not find a public read/write property named Id on type {0}", type));
                }

                idProps.Add(new {
                    prop = idProperty,
                    attr = new ColumnAttribute() { IsPrimaryKey = true, IsDbGenerated = true }
                });
            }

            var toReturn = new List<IColumnMapping>();

            foreach(var prop in idProps) {
                var map = new ColumnMapping(prop.prop);
                CopyAttributeToMapping(prop.attr, map);
                toReturn.Add(map);
            }

            return toReturn;
        }