Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 | Suche | FAQ

Hauptmenü
myCSharp.de
» Startseite
» Forum
» Suche
» Regeln
» Wie poste ich richtig?

Mitglieder
» Liste / Suche
» Wer ist online?

Ressourcen
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Microsoft Docs

Team
» Kontakt
» Cookies
» Spenden
» Datenschutz
» Impressum

  • »
  • Portal
  • |
  • Mitglieder
Beiträge von Paschulke
Thema: [gelöst] Wieso verlangt Add-Migration-Befehl, dass eine ID fehlt, obwohl das Property definiert ist?
Am im Forum: Datentechnologien

Halleluja!

Ja, ich bin blind. Und dämlich!

Das einzige Detail, das ich hier nicht gepostet und auch die ganze Zeit nicht beachtet hatte war mein DbSet:


public DbSet<NachrichtMap> Nachrichten { get; set; }

Da muss natürlich die Entität als generischer Parameter verwendet werden:


public DbSet<Nachricht> Nachrichten { get; set; }

Dann klappt's auch problemlos! Das Schlimmste: Der Fehler stand tatsächlich korrekt in der Fehlermeldung "The entity type 'NachrichtMap'..."

Sorry!!!

Thema: [gelöst] Wieso verlangt Add-Migration-Befehl, dass eine ID fehlt, obwohl das Property definiert ist?
Am im Forum: Datentechnologien

Leider derselbe Fehler, wenn ich Deine Anregung richtig verstehe...
Durch ApplyConfiguration hatte ich ja dasselbe gemacht. Aber einen Versuch war's wert:


        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            ////modelBuilder.ApplyConfiguration(new NachrichtMap());

            //modelBuilder.ApplyConfigurationsFromAssembly(typeof(NachrichtMap).Assembly);

            modelBuilder.Entity<Nachricht>()
                .HasKey(x => x.Id);
        }

Thema: [gelöst] Wieso verlangt Add-Migration-Befehl, dass eine ID fehlt, obwohl das Property definiert ist?
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: SQL Server 2019

Ich möchte mit Hilfe der Entity Framework Tools aus meinem Model eine Datenbank erstellen lassen. Analog zu dieser Anleitung: https://docs.microsoft.com/de-de/ef/core/get-started/?tabs=visual-studio#create-the-database

Dabei erhalte ich bei der Ausführung des Befehls Add-Migration immer folgende Fehlermeldung:

Fehler
The entity type 'NachrichtMap' requires a primary key to be defined. If you intended to use a keyless entity type call 'HasNoKey()'.

Ich kann sie mir nicht erklären. Habe mittlerweile alle anderen Entitäten und alle anderen Mappings aus meinem Projekt ausgeschlossen. Auch die Basisklasse Entity (mit der Id) habe ich entfernt, sodass ich nur noch folgende kleine Entität in meinem Projekt habe:


    public class Nachricht //: Entity
    {
        public int Id { get; set; }

        public DateTime Erstellungszeitpunkt { get; set; }

        public string Ueberschrift { get; set; }

        public string Text { get; set; }
    }

Theoretisch sollte ein Mapping überflüssig sein. Habe es deshalb ohne Überschreibung der OnModelCreating versucht und auch mit Hilfe einer Mapping-Klasse:


    public class NachrichtMap : IEntityTypeConfiguration<Nachricht>
    {
        public void Configure(EntityTypeBuilder<Nachricht> builder)
        {
            builder.HasKey(x => x.Id);
            //builder.HasNoKey(); //führt zum selben Fehler!
        }
    }

In meinem Context:


        protected override void OnModelCreating(ModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);

            //modelBuilder.ApplyConfiguration(new NachrichtMap()); //funktioniert auch nicht

            modelBuilder.ApplyConfigurationsFromAssembly(typeof(NachrichtMap).Assembly);
        }

Ich bin ratlos. Habe schon Visual Studio neu gestartet, einen Rebuild durchgeführt, sogar ein neues Projekt erstellt und dort dasselbe nochmal gemacht.

Bin ich blind? Oder ist da irgendwo ein Bug im Migrationstool?

Thema: [gelöst] Wie kann ich feststellen, ob sich jemand Remote mit dem Rechner verbunden hat?
Am im Forum: Netzwerktechnologien

Zitat von Th69
Dann sollte die Nachricht WM_WTSSESSION_CHANGE passend sein (vorher WTSRegisterSessionNotification aufrufen). Für C# selbstverständlich mittels P/Invoke: WTSRegisterSessionNotification.

Die Google-Suche nach Deinen Stichworten hat mich zu diesem schönen Event gebracht:

SystemEvents.SessionSwitch += OnSessionSwitch

Ich glaube in diesem Evenhandler kann ich alles machen, was ich möchte.

Danke für Eure Hilfe!

Thema: [gelöst] Wie kann ich feststellen, ob sich jemand Remote mit dem Rechner verbunden hat?
Am im Forum: Netzwerktechnologien

OK, das bringt mich schon einmal ein gutes Stück weiter. Aber damit kann ich lediglich prüfen wer angemeldet ist. Ich könnte in kurzen Abständen prüfen, ob sich etwas geändert hat. Wäre denkbar, aber irgendwie fühlt sich das nicht gut an. Oder übersehe ich etwas?

Eigentlich war ich auf der Suche nach einem Event auf das ich reagieren kann. Gibt es dahingehend etwas?

Thema: [gelöst] Wie kann ich feststellen, ob sich jemand Remote mit dem Rechner verbunden hat?
Am im Forum: Netzwerktechnologien

Ich habe für meine Software die Anforderung, dass sie bei Aufschaltung einer Remote-Desktop-Verbindung in die laufende Sitzung (s. g. Änderung des Remote-Control-Modus) gesperrt wird (eine erneute Eingabe des Passworts wird verlangt).

Ich finde keinen Ansatz, wie ich feststellen kann, ob sich jemand Remote aufgeschaltet hat. Kann mir jemand einen Tipp geben?

Thema: Wie Inhalte in einer App verschlüsseln?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Zitat von Papst
Wenn du - wie im ersten Kommentar - selber eine Datei verschlüsselst, was machst du mit dem Schlüssel für die Datei?
Das verschiebt dein Problem nur ein Stückchen weiter.

Aber wie löst man dann so eine Aufgabe sinnvoll?

Ich lasse ja genau deshalb den Schlüssel vom Benutzer eingeben (sein Passwort). Und nach allem was ich gelesen habe, sollte eine Passwortverschlüsselung z. B. mit Argon2 nicht mehr entschlüsselbar sein (mit aktuellen Mitteln).
Und ob ich es selber verschlüsselt ablege, oder von Windows verwalten lasse, ist dann theoretisch egal. Die Credential Manager-Lösung hätte allerdings einige Vorteile, weshalb ich diese favorisieren würde.

--

Und wegen des Passworts im Speicher: Gibt es eine empfohlene Vorgehensweise? Irgendwie muss ich es ja zwischenzeitlich halten.

Thema: Textformatierung wird in Visual Studio manchmal nicht mitkopiert
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Warum das mal funktioniert und mal nicht, kann ich dir leider nicht sagen.

Aber ich habe in den Visual Studio Optionen unter "Text-Editor" - "Allgemein" eine Checkbox gefunden, die dir helfen könnte: "Beim Kopieren/Ausschneiden Richt-Text kopieren".
Wenn diese Checkbox aktiviert ist, wird die Formatierung nach Word übernommen.

Thema: Wie Inhalte in einer App verschlüsseln?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Nochmal interessehalber:
- Wäre der in meinem ersten Kommentar beschriebene Ansatz sicher?
- Und habe ich es richtig verstanden, dass man Passwörter im Speicher halten kann, weil man davon ausgeht, dass der Benutzer ein grundsätzliches Problem hat, wenn jemand den Speicher analysieren kann?

Thema: Wie Inhalte in einer App verschlüsseln?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

OK, vielen Dank euch beiden! Das sieht gut aus. :-)

Allerdings hatte ich meine Anwendung mit .NET Core erstellt. Das NuGet Paket sieht älter aus. Kennt jemand ein Paket für .NET Core?
Ansonsten muss ich mir den Quellcode herunterladen und versuchen ihn auf .NET Core bzw. Standard zu konvertieren...

Thema: Wie Inhalte in einer App verschlüsseln?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Ich bin nicht sicher, ob das richtig rüber kam. Das Programm soll eine Windows 10 Desktop Anwendung sein. Deine Antwort bringt mich leider nicht wirklich weiter...

Thema: Wie Inhalte in einer App verschlüsseln?
Am im Forum: Entwicklungs- und Laufzeitumgebung (Infrastruktur)

Hallo!

Ich möchte einen TOTP Generator für Windows erstellen (im Prinzip genauso wie die Android App "Google Authenticator").
Grundsätzlich habe ich das hinbekommen. Meine Frage ist, wie kann ich die Schlüssel, die ich für die Generierung der Einmalpasswörter benötige, sicher speichern?

Aktuell habe ich es so gelöst, dass ich sie mit AES verschlüsselt in eine Textdatei schreibe.
Aber wie lege ich den Schlüssel für die AES-Verschlüsselung sicher ab? Nach etwas Recherche schien mir der einizig sichere Weg die Vergabe eines Passworts durch den Nutzer selber zu sein. Also vergibt der Nutzer nun beim erstmaligen Start ein Passwort, ich speichere den mit Argon2 verschlüsselten Hashwert des Passworts in einer Textdatei ab und lasse den Benutzer bei jedem Programmstart das Passwort neu eingeben.
Das Passwort muss ich allerdings jeweils im Speicher halten, weil ich es ja für die AES-Verschlüsselung benötige.

Fragen:
1. Ist es ok das Passwort im Speicher zu halten? Ich verwende einen SecureString - aber der ist ja nicht wirklich sicher. Aber irgendwo muss der Key für die Verschlüsselung ja schließlich stehen...
2. Ist die Vorgehensweise sinnvoll? Oder gib es bessere Möglichkeiten?
3. Wie macht es Google bei seiner App? Da muss ich kein Passwort eingeben!?

Thema: Update und Delete auf denselben Datensatz in einer Transaktion
Am im Forum: Datentechnologien

Zitat von Sir Rufo
Eigentlich könnt ihr euch den ganzen Aufwand mit dem Update-Vor-Delete doch sparen, wenn ihr einen Delete-Trigger auf den Tabellen erstellt.
...
Oder habe ich gerade einen Denkfehler?
Das Problem ist, dass ich nicht weiß wer die Änderung durchgeführt hat, da der angemeldete DB-Nutzer ein technischer Nutzer ist. Deshalb benötige ich die Information aus der Spalte "NutzerLetzteAenderung", die mir den Bezug zum tatsächlichen Nutzer liefert. Und diese Information bekomme ich m. E. nur indem ich sie per Update vor dem Löschen in die Tabelle schreibe.

Thema: Update und Delete auf denselben Datensatz in einer Transaktion
Am im Forum: Datentechnologien

OK, ich habe hier hausintern nochmal über die Möglichkeit diskutiert, die Protokollierung komplett in die Anwendung zu verlagern. Das scheint nicht diskutabel zu sein. Eure Argumente sind sicherlich sinnvoll. Aber es müssten sehr viele Prozesse geändert werden, damit wir wirklich sagen könnten, dass jede Änderung auch ohne Trigger zuverlässig protokolliert wird.

Momentan habe ich deshalb keine andere Idee, als beim Löschen einfach aus der Anwendung heraus einen zusätzlichen Protokolldatensatz zu schreiben. Dann hätten wir bei jedem Löschen 2 Datensätze in der Protokolltabelle. Gefällt mir gar nicht, aber etwas anderes fällt mir nicht mehr ein.

Thema: Update und Delete auf denselben Datensatz in einer Transaktion
Am im Forum: Datentechnologien

Vielen Dank für Eure Antworten!

Zitat
Wird dort dann der Trigger ausgelöst, der einen Eintrag in eine History Tabelle schreibt oder was macht der Trigger?
Genau!
Zitat
Ich würde für solch eine Nachverfolgung direkt im Code einen Eintrag in eine History Tabelle mit gleichem Aufbau eintragen, egal bei welcher Operation.
Dies würde ich aber nicht über einen Trigger lösen, sondern direkt im Code abbilden.
Der Gedanke war, dass ein Datenbank-Trigger auch Änderungen protokolliert, die direkt auf der Datenbank erfolgen, damit auch dort niemand etwas unbemerkt manipullieren kann.
Dazu wird in der Protokolltabelle der Datenbank-User, der die Änderungen durchgeführt hat, mit protokolliert. Leider benutzen wir in der Anwendung technische User. Deshalb haben wir uns dieses Workarounds mit der zusätzlichen Spalte "NutzerLetzteAenderung" bedient, der uns mitteilt wer die Änderung durchgeführt hat.
Zitat
Ich versteh allein den Mehrwert nicht, wenn man nicht alle historischen Vorgänge hat im Sinne eines Audits, sondern nur den letzten.
Die Trigger protokollieren jede Änderung in der Protokolltabelle. Die Spalte "NutzerLetzteAenderung" hilft uns lediglich die Information aus dem Programm in die Protokolltabelle zu transportieren.


Haltet ihr es für irrelevant die Änderungen, die direkt auf der Datenbank stattfinden, zu protokollieren? Das ist etwas, was bei uns bisher nicht diskutabel war. Aber vielleicht habt ihr ja gute Argumente... ;-)

Ansonsten noch eine andere Idee: Der Trigger protokolliert ja, wie gesagt, auch den angemeldeten DB-Nutzer. Kann man bei der Anmeldung an den SQL Server irgendwelche Metadaten aus dem Programm mitgeben, die der Trigger auslesen könnte. Dann könnte ich ggf. hierüber den tatsächlichen Nutzernamen mitgeben.

Und einen "Schalter", der Entity Framework dazu bringt, auch unnötige Updates durchzuführen, gibt es definitiv nicht?

Thema: Update und Delete auf denselben Datensatz in einer Transaktion
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: SQL Server 2008 R2 über Entity Framework 6.1

Hintergrund:
Wir möchten protokollieren, welcher Benutzer eine Änderung an einer Tabelle durchgeführt hat.
Dazu besitzen unsere Tabellen ein Feld "NutzerLetzteAenderung" in die die Id aus der Nutzertabelle eingetragen wird.
Alle Tabellen besitzen zudem einen Trigger, der diesen Wert benutzt, um nach jeder Änderung in einer Protokolltabelle festzuhalten, welcher Benutzer wann etwas geändert hat.

Ist vielleicht nicht die eleganteste Lösung, funktioniert aber so weit ganz gut.

Problem:
Beim Löschen steht natürlich nicht der Benutzer in der Tabelle, der das Löschen ausgelöst hat, sondern der, der zuletzt etwas an dem Datensatz geändert hat.

Das Setzen der NutzerId in das Feld "NutzerLetzteAenderung" erfolgt vor dem SaveChanges des DbContexts. An dieser Stelle wollte ich vor dem Löschen ein Update auf den Datensatz einfügen (siehe Code). Leider optimiert EF offensichtlich die Operationen, sodass das "überflüssige" Update nicht ausgeführt wird.

Wichtige Zusatzinfo: Es existiert eine Transaktion, die die Änderungen mit einem Commit abschließt.

Frage: Ist es möglich EF dazu zu bringen, das Update vor dem Delete auszuführen?

Hier der Code, wie er aktuell aussieht:


private void SetUserIdAndPerformUpdateBeforeDelete(DbContext dbContext)
{
    IList<DbEntityEntry> deletedEntities = dbContext.ChangeTracker.Entries()
        .Where(e => e.Entity is IUserEditableEntity && e.State == EntityState.Deleted)
        .ToList();

    if (deletedEntities.Any())
    {
        foreach (var entry in deletedEntities)
        {
            entry.State = EntityState.Modified;
            ((IUserEditableEntity) entry.Entity).NutzerLetzteAenderungId = _auditSessionData.UserId;
        }
        dbContext.SaveChanges();
        foreach (var entry in deletedEntities)
        {
            entry.State = EntityState.Deleted;
        }
        dbContext.SaveChanges();
    }
}

Thema: Word öffnet sich nicht immer im Vordergrund
Am im Forum: Office-Technologien

Zitat von ThomasE.
Bei mir wird dafür eine Console aufgerufen die das Umsetzt und sich danach gleich wieder schließt...
Ja, ich schätze dass mein Problem irgendwie mit dem Databinding von WPF zusammenhängt. Danke für die Info!

Thema: Word öffnet sich nicht immer im Vordergrund
Am im Forum: Office-Technologien

Weitere Tests waren auch erfolgreich. Vielen Dank muhtanten!!

Thema: Word öffnet sich nicht immer im Vordergrund
Am im Forum: Office-Technologien

Vielen Dank für Eure Antworten!
Die Lösung mit "SetForegroundWindow" scheint (nach einem ersten Test) funktionieren zu können. Ich werde das nun weiter testen.

@ThomasE: Welche Office Bibliothek meinst Du? Ich hatte Microsoft.Office.Interop.Word verwendet. Damit hatte ich die Probleme. Meintest du eine andere?

Thema: Word öffnet sich nicht immer im Vordergrund
Am im Forum: Office-Technologien

Die Hinweise in dem stackoverflow Beitrag haben mich leider nicht weitergebracht...

Der Code insgesamt ist etwas schwierig hier darzustellen, da mehrere Klassen beteiligt sind. Interessant ist vielleicht der Kontext:
Es handelt sich um eine WPF Anwendung. Beim Klick auf einen Button wird die Execute-Methode eines über DataBinding angebundenen ICommands im ViewModel aufgerufen. Darin erfolgen mehrere asynchronerAufrufe (mit await). Am Ende der Methode wird als letzte Anweisung Word aktiviert.

Kann es sein, dass das Programm durch das DataBinding oder durch einen asynchronen Aufruf den Fokus nach der Aktivierung von Word zurückerhält?

Hier doch mal der Code der Execute Methode, wie er sinngemäß aussieht:


public async void OpenWordDocumentExecute()
{
    var wordDocument = await LoadWordDocumentAsync();
    var seriendruckfelder = await LoadSeriendruckfelderAsync();
    SetSeriendruckfelder(wordDocument, seriendruckfelder);
    ActivateWord(wordDocument.Application);
}

private static void ActivateWord(Application wordApplication)
{
    wordApplication.Visible = true;
    wordApplication.ActiveDocument.Activate(); //Vorschlag Stackoverflow
    wordApplication.Activate();
}

Thema: Word öffnet sich nicht immer im Vordergrund
Am im Forum: Office-Technologien

Hallo zusammen,

Ich verzweifle an einem merkwürdigen Problem:
Ich öffne Word aus meiner Anwendung heraus, setze für die WordApplication Visible auf true und rufe Activate() auf. Word öffnet sich bisher zuverlässig im Vordergrund, wenn ich das Programm aus dem Visual Studio heraus starte.

Wenn ich aber die exe starte, und aus meinem Programm heraus Word öffne, öffnet es sich (offenbar standardmäßig) im Hintergrund. Wenn Word einmal den Dreh bekommen hat, sich auf dem Rechner im Vordergrund zu öffnen, dann öffnet es sich offensichtlich auch in der exe zuverlässig für längere Zeit (!?) immer wieder im Vordergrund. Bis es irgendwann wieder nicht mehr funktioniert.

Auf Rechnern auf denen ich nie debugge (sprich beim Kunden), schaffe ich es also nie Word im Vordergrund zu öffnen.

Hat jemand irgendeine Idee woran das liegen kann?

Thema: Objekt als Datenquelle für Seriendruck an Word übergeben
Am im Forum: Office-Technologien

Hallo!

Ich möchte ein Seriendruck Word Dokument erstellen und die Datenquelle als Objekt an das Dokument übergeben. Geht so etwas? Wenn ja, wie? Oder muss die Datenquelle immer eine physisch existierende Datei sein?

VG, Paschulke

Thema: Statische Codeanalyse mahnt CA1001 nicht an[=> korrekt]
Am im Forum: Grundlagen von C#

Zitat von witte
Welchen Lifestyle hat das Objekt?
Transient

Thema: Statische Codeanalyse mahnt CA1001 nicht an[=> korrekt]
Am im Forum: Grundlagen von C#

Das Feld ist private - sogar private readonly. Aber es wird aber außerhalb (vom IoC Container) erzeugt und über den Konstrukor in meine Klasse hineingereicht.

Ich hatte CA1001 so verstanden, dass die Codeanalyse (VS) immer warnt, wenn ein Feld disposable ist - unabhängig davon wer das Feld erstellt. Offensichtlich ist das nicht so. Das new ist entscheidend.

Dann muss ich mal in der Doku von Castle nachlesen, ob ich mich um das Dispose kümmern muss.

Vielen Dank, Abt für Deine Hilfe!

Thema: Statische Codeanalyse mahnt CA1001 nicht an[=> korrekt]
Am im Forum: Grundlagen von C#

Grundsätzlich sieht mein Code schon so aus, wie Deiner. Ich habe mich etwas missverständlich ausgedrückt. Natürlich hat die Klasse, die IDisposable implementiert eine Dispose Methode. Ich meinte die Klasse, die ein Feld vom Typ des IDisposables besitzt, hat keine Dispose Methode...

Warnt die Codeanalyse nur, wenn das Feld innerhalb der Klasse erstellt wurde?
Ich fürchte das Problem liegt darin, dass ich einen IoC Container (Castle Windsor) verwende, der mir das zu disposende Objekt über Constructor Injection in meine Klasse hinein reicht. Der IoC Container erstellt dabei das Objekt. Ist er evtl. so schlau das Objekt bei Zeiten auch zu disposen, sodass ich mich gar nicht darum zu kümmern brauche? Dann wäre ja tatsächlich alles in Ordnung.

Thema: Statische Codeanalyse mahnt CA1001 nicht an[=> korrekt]
Am im Forum: Grundlagen von C#

Hallo!

Ich bin irritiert über die statische Codanalyse:
Ich habe eine Klasse, die ein privates Feld besitzt, das IDisposable implementiert. Die Klasse selber besitzt zurzeit keine Dispose-Methode. Wenn ich CA1001 Types that own disposable fields should be disposable richtig verstehe, sollte die statische Codeanalyse nun diese Warnung bringen, wenn ich sie laufen lasse. Tut sie aber nicht. Lt. Codeanalyse ist mein Code in Ordnung.

Verstehe ich die Regel falsch? Oder gibt es Konstellationen in denen die statische Codeanalyse den Fehler nicht erkennt?

Thema: Fehlerbehandlung mit Try/Catch innerhalb einer asynchronen Methode
Am im Forum: Grundlagen von C#

Oh je... Asche auf mein Haupt!
Ich habe jetzt 2 Tage mit diesem Problem verbracht. Der schlichte, blöde Fehler war einfach nur, dass ich vergessen hatte den Rückgabewert zuzuweisen. Wie blind kann man sein...! Vor allem nachdem ich den Code noch einmal vereinfacht (das war hier mein Fehler!) hier rein gesetzt hatte...

Ich hatte also sinngemäß anstatt...


catch
{
    myObject = await db.ReadMyObjectAsync().ConfigureAwait(false);
}
return myObject;
einfach nur...


catch
{
    await db.ReadMyObjectAsync().ConfigureAwait(false);
}
return myObject;
geschrieben.

Wenn es hier eine Kaffeekasse für Dämlichkeit gäbe würde ich jetzt einen 5er rein schmeißen!

Sorry für die falsch gestellte Frage!!! Aber Eure Beiträge (vor allem der Beispielcode) haben mir trotzdem sehr geholfen. Einfach um einen anderen Blick auf das Problem zu bekommen...

Thema: Fehlerbehandlung mit Try/Catch innerhalb einer asynchronen Methode
Am im Forum: Grundlagen von C#

Hallo!

Ich habe eine Methode zum Laden eines Objekts, die asynchron aufgerufen werden soll.
Darin wird zunächst versucht das zu ladende Objekt aus einer Datei zu deserialisieren. Wenn das fehlschlägt, soll das Objekt aus einer Datenbank gelesen werden.

Hier mal ein auf die wesentlichen Aspekte rediziertes Beispiel:


public void Main()
{
    MyObject myObject = LoadMyObjectAsync().Result();

    // myObject ist null, wenn der Code durch den catch-Block läuft.
}

private async Task<MyObject> LoadMyObjectAsync()
{
    try
    {
        return await DeserialzeMyObjectAsync().ConfigureAwait(false);
    }
    catch (SerializationException)
    {
        return await db.ReadMyObjectAsync().ConfigureAwait(false);
    }
}

Stellt mal außer Frage, ob das Beispiel in der Form Sinn macht. Mir geht es darum, die Technik zu verstehen...

Ich habe festgestellt, dass innerhalb der Methode DeserialzeMyObjectAsync ein Thread erzeugt wird, der geschlossen wird, wenn der Code seinen erwarteten Weg geht. Wenn der Code in die Exception läuft, bleibt der Thread auch nach der Rückkehr in die wartende Methode bestehen. Deshalb ist myObject im aufrufenden Thread null.

Wie fange ich innerhalb der Methode "LoadMyObjectAsync" den Fehler korrekt ab? Bzw. wie fahre ich im ExceptionHandler korrekt fort?

Thema: Unterschiedliche Connections in einer Entity Framework Transaktion
Am im Forum: Datentechnologien

Vielen Dank für die Ideen :-)
Ich werde mir das morgen in Ruhe ansehen.

Thema: Unterschiedliche Connections in einer Entity Framework Transaktion
Am im Forum: Datentechnologien

verwendetes Datenbanksystem: SQL Server 2008 R2

Hallo,

in meiner Datenbank habe ich mehrere Benutzer mit unterschiedlichen Rechten.
Ich habe eine Anforderung, dass ein Benutzer einen Datensatz auf den er Rechte besitzt, ändern muss. Gleichzeitig muss jedoch ein "techischer" Mechanismus ablaufen, der dafür sorgt, dass eine technische Spalte in mehreren Datensätzen derselben Tabelle geändert wird. Der angemeldete Benutzer hat jedoch u. U. kein Recht darauf, diese Datensätze zu lesen oder zu bearbeiten.

Die Idee ist nun, diese technische Anpassung durch einen technischen Benutzer durchzuführen. In 2 unterschiedlichen Transaktionen ist dies auch möglich. Gibt es eine Möglichkeit, eine Transaktion über 2 unterschiedliche Connections durchzuführen?

VG, Paschulke