Laden...

WCF Service, Probleme beim Verbinden zu einer Collection per Context

Erstellt von baer999 vor 8 Jahren Letzter Beitrag vor 8 Jahren 1.450 Views
B
baer999 Themenstarter:in
375 Beiträge seit 2007
vor 8 Jahren
WCF Service, Probleme beim Verbinden zu einer Collection per Context

Hallo,

ich habe einen WCF Service, der beim Datenmodel zur Entität "Computer" eine 1:1 Beziehung zu einer "Datenbank" hat, diese wieder mit 1:n auf "Table", also Collection "Tables" zeigt.

Nun habe ich ein Problem, wie ch das sinnvoll per context miteindander verknüpfen kann, da mir C# immer Fehler ausweist, wie im angehängten Screenshot zu sehen ist.

Kann mir jemand einen Tipp geben wie ich das korrekt zu einander verknüpfen kann?

Danke!

6.911 Beiträge seit 2009
vor 8 Jahren

Hallo baer999,

es ist fast zu wenig Code den du uns hier zeigst um sich ein Bild von der Problemdomäne machen zu können.

Da in der Fehlermeldung aber etwas von "closed type" steht, geh ich davon aus, dass etwas zu früh disposed wird - vermutlich der Context, aber welcher das ist verschweigst du uns wiederum.

Da es um WCF geht die Frage: Du erzeugst den Context eh bei jedem Service-Methodenaufruf neu? Od. hast du spezielle Instanziierungsmethoden ermöglicht?

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"

B
baer999 Themenstarter:in
375 Beiträge seit 2007
vor 8 Jahren

Danke für die schnelle Reaktion.

Also die Erzeugung des Context erfolgt tatsächlich vor jedem Request über folgende Methode:

        public static WS_Test.GB CreateContext()
        {
            var context = new WS_Test.GB(new Uri(WebBase.GBWebServiceUrl));
            context.Timeout = 15;
            context.SendingRequest2 += context_SendingRequest2;

            return context;
        }

Dann wird hier wie folgt aufgelöst per Expand (wobei ich nich weißt, wie ich die Tables auflösen soll von dem Object Database):

                var context = WebBase.CreateContext();
                
                Computer comp = context.Computer
                    .Expand("License") 
                    .Expand("Hardware")
                    .Expand("Process")
                    .Expand("Version")
                    .Expand("Address")
                    .Expand("Settings")
                    .Expand("Database")
                    .Expand("Service")
                    .Expand("Printers")
                    .Where(c => c.CPUID == settings.ComputerId).FirstOrDefault();

Anschließend wird ggfs. die Database erzeugt:

                if (comp.Database == null)
                {
                    comp.Database = new Database();
                    context.AddToDatabase(comp.Database);
                    context.AddLink(comp.Database, "Computers", comp);
                }

Um daraufhin die Tables zu füllen (bzw. füllen zu wollen):

                foreach (var row in DBInfo.GetTablesInfo().ResultSet[0].Rows)
                {
                    var name = row.Values[1].ToString();
                    var tab = comp.Database.Tables.Where(t => t.Name == name).FirstOrDefault();

                    if (tab == null)
                    {
                        tab = new Table();
                        tab.Name = name;
                        tab.Database = comp.Database;
                       
                        comp.Database.Tables.Add(tab);
                        context.AddToTable(tab);
                        //context.AddRelatedObject(tab, "Tables", comp.Database);
                        //context.AddLink(tab, "Tables", comp.Database);
                    }
                    tab.Bytes = Convert.ToInt64(row.Values[4]);
                }

Hilft das bei der Analyse etwas weiter?

Problem ist:

  1. Auflösung der Tables im Query
  2. Korrektes "binden" der Table(s) an die Database.

thx!

B
baer999 Themenstarter:in
375 Beiträge seit 2007
vor 8 Jahren

Das Problem liegt im letzten Code Schnipsel, also wie füge ich korrekt ein Item einer Collection zu.

comp.Database.Tables.Add(tab);
                        context.AddToTable(tab);

Meine Versuche schlugen bisher fehl:

//context.AddRelatedObject(tab, "Tables", comp.Database);
                        //context.AddLink(tab, "Tables", comp.Database);
6.911 Beiträge seit 2009
vor 8 Jahren

Hallo baer999,

welcher Context ist denn überhaupt? Das hab ich dich oben schon (indirekt) gefragt. Ohne diese Infos kann dir keiner gezielt helfen.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"