Neuen Repository-Eintrag aus einem Stream anlegen

Morgen Alexandra, ich habe dir hier mal meine Implentierung von CreateOrUpdateItem eingefügt, vielleicht hilft dir das weiter.

public void CreateOrUpdateItem(RepositoryItem item, string importUserData, Stream sourceStream)
        {
            if (item.ExtractDisplayName(GermanLocalId) == null)
            {
                var descriptorString = item.Descriptor;
                var descriptor = RepositoryItemDescriptor.LoadFromDescriptorString(descriptorString);
                descriptor.SetUIName(GermanLocalId, currentNeededItem.Name);
                item.Descriptor = descriptor.SerializeToString();
            }

            if(isImportFile)
            {
                ImportItem(item, sourceStream);
                return;
            }

            byte[] fileContent = null;

            var documentKey = AlphanumericKeyUtils
                .GenerateUniqueKey(6, dataContext.Documents
                    .Select(x => x.DocumentKey)
                    .ToList());

            // Wenn sourceStream null ist, ist es ein neues Projekt.
            if (sourceStream != null)
            {
                using (var memStream = new MemoryStream())
                {
                    sourceStream.CopyTo(memStream);
                    fileContent = memStream.ToArray();
                }
            }
            else
            {
                AddItem(item, documentKey);
                return;
            }

            var isTemplate = ItemIsTemplate(item);

            var document = dataContext.Documents
                .SingleOrDefault(x => x.ItemRepoId == item.InternalID);

            if (document == null)
            {
                document = new Document()
                {
                    IsRepoitem = true,
                    DocumentKey = documentKey
                };
                dataContext.Documents.Add(document);
            }

            document.FileContentOfDraft = fileContent;
            document.IsTemplate = isTemplate;
            document.ItemRepoId = item.InternalID;
            document.ItemRepoType = item.Type;
            document.Descriptor = item.Descriptor;
            document.LastModification = item.LastModificationUTC.ToLocalTime(); // LL liefert hier immer die UTC zurück, daher in Ortzeit umwandeln.
            document.UserId = userId;
            document.Filename = document.Filename == null ? item.ExtractDisplayName() : document.Filename;
            document.LaboratoryId = laboratoryId;
            if (document.Name == string.Empty)
            {
                document.Name = item.ExtractDisplayName();
            }

            dataContext.SaveChanges();
        }

Hier noch das AddItem

        private void AddItem(RepositoryItem item, string documentKey)
        {
            if (dataContext.Documents
                    .SingleOrDefault(x => x.ItemRepoId == item.InternalID) != null)
            {
                return;
            }

            dataContext.Documents.Add((currentNeededItem));

            currentNeededItem.DocumentKey = documentKey;
            currentNeededItem.ItemRepoId = item.InternalID;
            currentNeededItem.ItemRepoType = item.Type;
            currentNeededItem.Descriptor = item.Descriptor;
            currentNeededItem.LastModification = item.LastModificationUTC.ToLocalTime(); // LL liefert hier immer die UTC zurück, daher in Ortzeit umwandeln.
            currentNeededItem.UserId = userId;
            currentNeededItem.Filename ??= item.ExtractDisplayName();
            currentNeededItem.Name ??= item.ExtractDisplayName();
            dataContext.SaveChanges();
        }