partial void DeleteFieldMetadata(FieldMetadata instance);
 partial void UpdateFieldMetadata(FieldMetadata instance);
        private static IFieldMetadata DeserializeFieldMetadata(FieldMetadata fieldMetadata)
        {
            if (Kit.IsEmpty(fieldMetadata.Definition)) return null;

            string fieldMetadataTypeName = string.Format("RapidWebDev.ExtensionModel.{0}FieldMetadata, RapidWebDev.ExtensionModel", fieldMetadata.Type);
            Type fieldMetadataType = Type.GetType(fieldMetadataTypeName, true);

            XmlSerializer serializer = new XmlSerializer(fieldMetadataType);
            using (StringReader stringReader = new StringReader(fieldMetadata.Definition))
            {
                IFieldMetadata fieldMetadataImpl = serializer.Deserialize(stringReader) as IFieldMetadata;
                fieldMetadataImpl.Id = fieldMetadata.FieldMetadataId;
                fieldMetadataImpl.FieldGroup = fieldMetadata.FieldGroup;
                fieldMetadataImpl.Priviledge = fieldMetadata.Priviledge;
                fieldMetadataImpl.Ordinal = fieldMetadata.Ordinal;
                fieldMetadataImpl.Description = fieldMetadata.Description;
                fieldMetadataImpl.Inherited = false;
                return fieldMetadataImpl;
            }
        }
 partial void InsertFieldMetadata(FieldMetadata instance);
        /// <summary>
        /// Saves the extension type metadata
        /// </summary>
        /// <param name="objectMetadataId">The object metadata id.</param>
        /// <param name="fieldMetadata">The field metadata.</param>
        public void SaveField(Guid objectMetadataId, IFieldMetadata fieldMetadata)
        {
            Kit.NotNull(fieldMetadata, "fieldMetadata");
            Kit.NotNull(fieldMetadata.Name, "fieldMetadata.Name");

            lock (syncObject)
            {
                this.DeleteField(objectMetadataId, fieldMetadata.Name);

                using (ExtensionModelDataContext ctx = DataContextFactory.Create<ExtensionModelDataContext>())
                {
                    FieldMetadata entity = new FieldMetadata
                    {
                        Name = fieldMetadata.Name,
                        Priviledge = fieldMetadata.Priviledge,
                        FieldGroup = fieldMetadata.FieldGroup,
                        Description = fieldMetadata.Description,
                        ObjectMetadataId = objectMetadataId,
                        Ordinal = fieldMetadata.Ordinal,
                        Type = fieldMetadata.Type,
                        Definition = SerializeFieldMetadata(fieldMetadata)
                    };

                    ctx.FieldMetadatas.InsertOnSubmit(entity);
                    ctx.SubmitChanges();

                    fieldMetadata.Id = entity.FieldMetadataId;
                }
            }
        }