Ich bin mit Definitionen von Entity-Framework gefangen und Objekte verwenden.
Ich versuche eine hochgeladene Datei zu speichern, sobald ich die Details zu dieser Datei in meiner Datenbank gespeichert habe.
Zugriff auf ein Objekt bei Verwendung unterschiedlicher Kontexte nicht möglich
public async Task<IActionResult> Edit(string List<IFormFile> files, [Bind("param")] Entity entity)
{
if (ModelState.IsValid)
{
try
{
_context.Update(entity);
await _context.SaveChangesAsync();
//update Attachments
if (files.Count > 0)
{
attachment.UploadFiles(files);
}
}
catch (DbUpdateConcurrencyException)
{
if (!EntityExists(id))
{
return NotFound();
}
else
{
throw;
}
}
return RedirectToAction("Index");
}
return View(entity);
}
Wenn ich die Anwendung ausführen und will das Formular I unten Fehlermeldung einreichen:
nicht angeordnet Objekt zugreifen kann. Objektname: 'FileBufferingReadStream'.
[HttpPost]
public async void UploadFiles(List<IFormFile> files)
{
if (files == null || files.Count == 0)
{
log.error("files not selected");
}
try
{
List<string> filenames = new List<string>();
string directory = Directory.GetCurrentDirectory() + "\\wwwroot";
createDir(directory);
foreach (var file in files)
{
string filename = file.GetFilename();
filenames.Add(filename);
}
if (filenames.Count > 0)
foreach (var filename in filenames)
{
AttachmentQ(filename, directory, createdBy);
}
foreach (var file in files)
{
string filename = file.GetFilename();
var path = Path.Combine(directory, filename);
using (var stream = new FileStream(path, FileMode.Create))
{
await file.CopyToAsync(stream);
}
filenames.Add(filename);
}
}
catch (Exception e)
{
log.error(e.Message);
}
}
[ValidateAntiForgeryToken]
public async void AttachmentQ(string filename, string path, string createdBy)
{
try
{
Attachment attachment = new Attachment
{
Name = filename,
Path = path,
CreatedBy = createdBy,
CreatedDate = DateTime.Now
};
_context.Add(attachment);
await _context.SaveChangesAsync();
}
catch (Exception e)
{
log.error(e.Message);
}
}
Überraschenderweise ich Fehler nicht im Debug-Modus. Aber wenn ich die App starte, bekomme ich Diese Seite funktioniert nicht Fehler.
Ich bemerkte auch, dass ich einen Wert zurückgeben muss, wenn ich async benutze, aber ich habe keinen Rückgabewert in UploadFiles()
und AttachmentQ()
Methoden.
Könnten Sie mir bitte helfen, Objekte mit verschiedenen Kontexten zu behandeln?
Danke
Also, wo genau sich Ihre Fehler auftreten? – grek40
Hey @WahidBitar. Es hat gut funktioniert. Vielen Dank. Das einzige Problem ist, dass die Seite nicht zur Index Seite zurückgebracht wird, wie in 'Edit()' Methode angefordert, so bekomme ich * Diese Seite funktioniert nicht * Fehler nach. –
Wenn Sie in der Methode keine asynchrone Arbeit haben, fügen Sie der Methode nicht das async-Schlüsselwort hinzu und verwenden Sie einfach 'return Task.FromResult ((object) null);' , damit Ihre Methode wie 'public Task' aussieht SomeMethod() {... zurückgeben Task.FromResult ((Objekt) null);} ' –