/// <summary>
        /// Maps the entity part from package part.
        /// </summary>
        /// <param name="entityPartPackagePart">The entity part package part.</param>
        /// <param name="includeData">if set to <c>true</c> include data with the entity part.</param>
        /// <returns>EntityPart.</returns>
        public EntityPart MapEntityPartFromPackagePart(PackagePart entityPartPackagePart, bool includeData)
        {
            //Get the entity part metadata and deserialize.
            EntityPartMetadata metadata = GetEntityPartMetadata(entityPartPackagePart);

            var result = new EntityPart
            {
                Category   = metadata.Category,
                Created    = metadata.Created,
                CreatedBy  = User.GetUser(metadata.CreatedBy),
                EntityId   = new Guid(entityPartPackagePart.Package.PackageProperties.Identifier),
                ETag       = metadata.Etag,
                Modified   = metadata.Modified,
                ModifiedBy = User.GetUser(metadata.ModifiedBy),
                Name       = metadata.Name,
            };

            if (includeData)
            {
                using (var fs = entityPartPackagePart.GetStream())
                {
                    var bytes = fs.ReadToEnd();
                    result.Data = Encoding.UTF8.GetString(bytes);
                }
            }

            return(result);
        }
        private EntityPart CreateEntityPart(string partName, EntityPartMetadata entityPartMetadata, string data)
        {
            if (partName.IsNullOrWhiteSpace())
            {
                throw new ArgumentNullException("partName");
            }

            if (entityPartMetadata == null)
            {
                throw new ArgumentNullException("entityPartMetadata");
            }

            var entityPartUri = GetEntityPartUriFromEntityPartName(partName);

            if (m_package.PartExists(entityPartUri))
            {
                throw new InvalidOperationException("An entity part with the specified name already exists within the entity.");
            }

            var entityPart =
                m_package.CreatePart(entityPartUri, Data.Constants.EntityPartContentType);

            //Copy the data to the entity part
            using (var fileStream = new StringStream(data))
            {
                fileStream.CopyTo(entityPart.GetStream());
            }

            //Create a relationship between the default entity part and the entity part.
            var defaultEntityPart = GetDefaultEntityPartPackagePart();

            defaultEntityPart.CreateRelationship(entityPartUri, TargetMode.Internal, Data.Constants.EntityPartRelationship);

            //Create the entity part metadata object.
            var entityPartMetadataUri  = GetEntityPartMetadataUriFromEntityPartName(partName);
            var entityPartMetadataPart = m_package.CreatePart(entityPartMetadataUri, Data.Constants.EntityPartContentType);

            var metadata = JsonConvert.SerializeObject(entityPartMetadata, new EtagJsonConverter());

            //Copy the metadata to the entity part metadata part.
            using (var fileStream = new StringStream(metadata))
            {
                fileStream.CopyTo(entityPartMetadataPart.GetStream());
            }

            //Finally, create the relationship between the entity part and its metadata -- not that we couldn't have found it by convention.
            entityPart.CreateRelationship(entityPartMetadataUri, TargetMode.Internal, Data.Constants.EntityPartMetadataRelationship);

            return(MapEntityPartFromPackagePart(entityPart));
        }
        /// <summary>
        /// Creates a new Entity Part in the Entity Package.
        /// </summary>
        /// <param name="partName"></param>
        /// <param name="category"></param>
        /// <param name="data"></param>
        /// <returns></returns>
        public EntityPart CreateEntityPart(string partName, string category, string data)
        {
            var entityPartMetadata = new EntityPartMetadata
            {
                Category   = category,
                Created    = DateTime.Now,
                CreatedBy  = User.GetCurrentUser().LoginName,
                Etag       = Etag.Empty,
                Modified   = DateTime.Now,
                ModifiedBy = User.GetCurrentUser().LoginName,
                Name       = partName,
                Properties = new Dictionary <string, string>(),
            };

            return(CreateEntityPart(partName, entityPartMetadata, data));
        }