protected override IPropertyType[] CreateTargetPropertyTypes(IBeanMetaData bmd, object bean, string[] propertyNames)
        {
            IDictionary modifiedPropertyNames = bmd.GetModifiedPropertyNames(bean);
            IList       types = new ArrayList();
            string      timestampPropertyName = bmd.TimestampPropertyName;
            string      versionNoPropertyName = bmd.VersionNoPropertyName;

            for (int i = 0; i < propertyNames.Length; ++i)
            {
                IPropertyType pt = bmd.GetPropertyType(propertyNames[i]);
                if (pt.IsPrimaryKey == false)
                {
                    string propertyName = pt.PropertyName;
                    if (propertyName.Equals(timestampPropertyName, StringComparison.CurrentCultureIgnoreCase) ||
                        propertyName.Equals(versionNoPropertyName, StringComparison.CurrentCultureIgnoreCase) ||
                        modifiedPropertyNames.Contains(propertyName))
                    {
                        types.Add(pt);
                    }
                }
            }
            IPropertyType[] propertyTypes = new IPropertyType[types.Count];
            types.CopyTo(propertyTypes, 0);
            return(propertyTypes);
        }