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();
}