Ich versuche, ein einfaches Tool zu erstellen, das Daten aus zwei Datenbanken und Active Directory abruft. Das Problem, mit dem ich zu kämpfen habe, besteht darin, diese Daten einfach auf einer einzigen Seite zusammenzuführen.Mehrere Datenbanken, Einzelansicht
Ich habe versucht, jede Methode, die ich denken kann, um dies zu erreichen, aber letztlich, was kommt es darauf an, wie ich Daten von einem anderen Controller/Kontext/Modell bevölkern?
Vielleicht bin ich über denke, es sollte eine sehr einfache Aufgabe sein (bearbeiten: einfach für jemanden, der vorher nicht die Zeit genommen hat, MVC zu folgen). Mein aktueller Status:
Aus Gründen der Einfachheit werde ich Active Directory vorerst ignorieren. Also, ich habe zwei Controller, zwei Ansichten, zwei Kontexte und Modelle für jede Tabelle. Sie arbeiten separat gut. Der Einfachheit halber ist der einzige gemeinsame Nenner, dass beide Datenquellen mit dem gleichen Suchstring, einer eindeutigen Kennung eines Mitarbeiters, durchsucht werden können.
ConnectionDatabase Bahnen Informationen über Maschinen, die mit einem Service, den wir verwenden, wie Benutzername, Computername usw.
InventoryDatabase ist ein Inventar-Management-Tool, Humandaten eingegeben verbinden.
Die wichtigste Information hier ist an dieser Stelle Ich versuche einfach, Daten aus beiden dieser Datenbanken auf einer Seite anzuzeigen. Ich verwende keine Joins, ich versuche nicht, die Daten oder irgendetwas in dieser Richtung zu korrelieren. Im Wesentlichen, wenn ich einfach die Ansicht von Datenbank1 und die Ansicht von Datenbank2 nehmen könnte und sie beide in der gleichen Ansicht zeigen würde, die ehrlich gesagt alles ist, was ich brauche. Zwei völlig getrennte Entitäten, die zufällig auf derselben Seite erscheinen.
Eine Suchfunktion ermöglicht dem Benutzer die Suche nach einer einzelnen Anmeldenummer. Diese Nummer ist in beiden Datenbanken gespeichert und ich möchte, dass die Ergebnisse getrennt sind. Beispielsweise eine linke Spalte, die alle Datensätze aus ConnectionDatabase anzeigt, die SSO abgleichen, und eine rechte Spalte, die alle Datensätze aus InventoryDatabase zeigt, die SSO abgleicht.
ConnectionDatabase
| - Table1
| - ClientName
| - SSO
| - Other Info
InventoryDatabase
| - Table1
| - Serial Number
| - SSO
Edit: Wenn ein Controller erstellt wird es mein Verständnis ist ein Kontext, um es gesendet wird, damit es auf einen einzelnen Kontext zu begrenzen. Die Funktion GetConnectionAssets funktioniert perfekt, da sie natürlich das AClient-Modell ConnectionContext verwendet.
Jetzt möchte ich in InventoryDatabase werfen, die eigene InventoryDatabaseContext und InventoryDatabaseModel hat. Das Duplizieren von GetConnectionAssets und das einfache Verweisen auf InventoryDatabaseContext funktioniert nicht, da der gesamte Controller ConnectionContext zugewiesen ist.
In Anstrengung, dies weiter zu erläutern, hier ist mein Controller für ~/Nachschlagen/BySSO:
namespace MyApp.Controllers
{
public class BySSOController : Controller
{
private readonly ConnectionContext _context;
public BySSOController(ConnectionContext context)
{
_context = context;
}
public ActionResult PartialView()
{
return View();
}
public List<AClient> GetConnectionAssets(string SSO)
{
var aClients = from a in _context.AClient select a;
aClients = aClients.Include(a => a.AUserDefined)
.OrderByDescending(a => a.LastConnectDate);
if (!String.IsNullOrEmpty(SSO))
{
aClients = aClients.Where(a => a.AUserDefined.Sso.Equals(SSO))
.Include(a => a.AUserDefined);
}
return aClients.ToList();
}
public PartialViewResult RenderAClients(string SSO)
{
return PartialView(GetConnectionAssets(SSO));
}
}
}
Edit: Ich glaube, einen besseren Weg, dies ich ein Armaturenbrett bin Gebäude zu beschreiben. Stellen Sie sich also ein Vorfall-System-Dashboard vor, das auf einer einzelnen Seite Messwerte, derzeit geöffnete Tickets, Informationen zu Benutzern und einige Daten möglicherweise von einer externen Quelle anzeigt. Für den Code selbst können Daten völlig irrelevant sein.
Bearbeiten: Da es mir so schwer fällt, das zu erklären und mich selbst zu frustrieren, lass es mich in einem Bild zusammenfassen.Ich möchte, dass diese Seite genau so aussieht: http://imgur.com/a/tgZju
Außer ich möchte, dass es in einem Browserfenster statt zwei ist. :)
Möchten Sie in SQL oder C# beitreten? Wenn C#, möchten Sie als Ergebnis eine neue Klassendefinition oder einen anonymen Typ erstellen? –
Ich glaube nicht, dass ich suche, die Daten überhaupt beizutreten. Vorzugsweise wären die Ergebnisse ihre eigenen Entitäten. Ich glaube nicht, dass ich es richtig erklärt habe. Stellen Sie sich folgendes vor: ~/MyViewToIncludeEverything? SSO = # hat zwei Iframes, die nur auf ~/ConnectionDatabaseView zeigen? SSO = # und ~/InventoryDatabaseView? SSO = # - Obwohl das funktionieren würde, ist es eindeutig nicht der richtige Weg. – mrUlrik