Ich muss Code hinzufügen, um in vorhandenen Code eine Liste von Objektnamen einzufügen, aus einem Azure Blob Store zu ziehen. Die Sache ist, dass die Tabelle, aus der ich die Liste ziehe, eine Tabelle von Blobnamen in einer SQL Azure DB (AdminDB) ist. Die tatsächliche Liste, die ich erstellen muss, stammt aus einem Aggregat von 3 Tabellen in einer anderen SQL Azure DB (runtimeDB) Ich kann nicht einfach eine JOIN-Abfrage über die beiden durchführen, da die virtualisierten DBs von Azure das nicht zulassen.Wie schreibe ich eine C# -Liste Abfrage über 3 Tabellen in 2 verschiedenen Azure SQL-Datenbanken
Des Weiteren aus Leistungsgründen die runtimedb nicht BlobNames verwenden, sondern verwendet stattdessen ein internalId, die in der runtimedb
in einer Zwischentabelle werden muss nachgeschlagen So habe ich die folgenden C# Definitionen
public partial class adminDb : DbContext
{
public virtual DbSet<missingObjNames> MissingObjects {get; set;}
// contains fields uchar(16) BlobId;
}
public partial class runtimeDB: DbContext
{
public virtual DbSet<myObjects> myObjects {get; set;}
// contains fields int InternalId, int blobType uchar() objectName, uchar() objectDesc.
public virtual DbSet<idMap> IdMap {get; set}
// contains fields int InternalId, uchar(16) BlobId
}
Also habe ich die elegante Lösung aufgegeben und versuche jetzt nur, es brutal zu erzwingen, da ich weiß, dass die Liste höchstens 4k-10k Einträge enthält (das ist DB Cleannup code)
Ich habe die Zugriff auf jede Datenbankdefinition ed als
var runContext = new runtimeDBContextContainer();
var adminContext = new adminDBContextContainer();
dann gehe ich die Liste der Blob Namen ziehen
var MissingObjList = (adminContext.missingObjects.Select(ss => ss.BlobId)).ToList();
var listInternalIds = new List<int.();
foreach (myBlobId in MissingObjList)
{
int blobInternalId = (from r in context.IdMap
where r.BlobId == myBlobId
select r.InternalId).First();
MissingObjList.Add(blobInternalId);
}
So
weit, so gut ich am Ende mit einer Liste der internen IDs auf der MyObjects Tabelle I
jetzt ziehen habe einen
Public Class ObjectDataItem
{
public int InternalId {get; set;}
public int? blobType {get; set;}
public string objectName {get; set;}
public string ObjectDesc {get; set;}
}
Also geht der Code dann zu versuchen und eine Liste der fehlenden Objec aufzubauen ts (was der Rest des Update-Codes erwartet) durch Iteration durch die Liste der InternalIds. ja ich weiß - das ist dumm Brute-Force-Code und sein vor allem, weil ich ein n00b bei Verwendung von Linq 3 Tage von MSDN-Tutorials bin nicht mir vielen klüger (ich bin Festsetzung geerbt Code)
var listBlobs = new List<ObjectDataItem>();
foreach (var missingBlobId in MissingObjList)
{
IQUERYABLE <myObjects> objQuery = (from o in runContext.myObjects
where o.InteralId = missingBlobId
select o);
var thisObj = new {objQuery.InternalId,
objQuery.blobType,
objQuery.objName,
objQuery.objDesc};
listBlobs.Add(thisObj);
}
Diese letzten zwei verursachen mir einen Syntaxfehler. im Wesentlichen Intellisense sagt mir, dass mein ObjQuery enthält keine Definitionen der ObjectDataItem bin ich
Aufzählen und ich bin zu viel von einem N00b, um herauszufinden, was ich falsch gemacht habe
Danke, seinen geerbten Code .. versuchen, mit dem Kontext konsistent zu bleiben –