Frage

Ich baue meine Webanwendung für eine Verbindung mit DB. Bisher habe ich es geschafft, damit umzugehen (obwohl ich BLL & Dal nicht gebaut habe).

Ich habe eine Tabelle mit Spalten "ID". Ich weiß, dass es eine Möglichkeit gibt, es auf dem SQL -Server zu deklarieren, der automatisch inkrementiert werden soll. (Aber ich will es nicht).

Ich möchte eine globale Anwendungsvariable deklarieren, die den Wert hält.

Ich habe 2 Fragen:

  1. Wie erkläre ich es?

  2. Wo erstelle ich es und initialisiere es? (Ich habe mehrere Anmeldeseiten).

DANKE!

ps

Es wäre hilfreich, wenn mir jemand sagen wird, wie ich den Dal mit meinen gespeicherten Verfahren baue? Und für das, was ich brauche, benutzen Sie BLL, was ich im Dal nicht tun kann?

War es hilfreich?

Lösung

Du kannst den ... benutzen Application Objekt - es ist Teil der HttpContext und ist auf jeder Seite direkt zugänglich.

Wenn Sie es nicht verwenden möchten, möchten Sie vielleicht a schreiben Globals Klasse (oder wie auch immer Sie Sie mögen), der statische Mitglieder enthält.

public class Globals
{
  public static int Counter { get; set;}
}

// accessed from other classes:
Globals.Counter++;

Beide Ansätze haben nicht funktionieren, dass Sie eine Webfarm oder mehrere Webanwendungen haben und keine Neustarts überleben.


Unabhängig von diesen Optionen ist die richtige Lösung (auch wenn Sie sie nicht verwenden möchten - können Sie erklären, warum?), Die ID -Feld mit dem verwenden IDENTITY Klausel.

Andere Tipps

Das Speichern der Variablen ist der einfache Teil. Das Verwalten Ihrer eigenen ID -Generation und die Probleme mit Streit und Parallelität ist der schwierige Teil. Viel Glück.

Es gibt wirklich keine globale Variable in ASP.NET. Denken Sie daran, HTTP ist staatenlos.

Am nächsten kommen Sie, um etwas im Anwendungsobjekt zu speichern:

Application["myvar" ] = x;
x = Application["myvar"];

Aber auch hier geht diese Variable verloren, wenn die App neu starten muss, was sie von Zeit zu Zeit bewirken kann.

Eine viel bessere Lösung für das, was Sie beschreiben, ist ein Datenbankwert.

Das Inkrementieren einer Ganzzahl und dann diese inkrementierte ID in die DB zu werfen, ist voller Gefahr. Multithreading? Was passiert, wenn die Anwendung springt? Teilen Dev und ProD -Bereitstellungen dieselbe Zahlenmenge?

Es hört sich so an, als ob Sie eine global eindeutige Kennung benötigen und außerhalb der Datenbank erstellt werden können. Das klingt nach einem Job für eine GUID. Sicher, es nimmt mehr Platz in der DB ein, aber es ist wahrscheinlich nicht das Schlimmste, was Sie für die Datenbank machen werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top