db4o Developer Community

db4o open source object database, native to Java and .NET
Welcome to db4o Developer Community Sign in | Join
in Search
More Search Options

Doppelte Stored Classes

Last post 09-08-2008, 04:36 PM by mjablonski. 3 replies.
Sort Posts: Previous Next
  •  09-05-2008, 08:35 AM 50909

    Doppelte Stored Classes

    Meine ersten Versuche in db4o führen zu folgendem Problem:

    Ich habe einfach das erste Beispiel mit den 2 Piloten getestet. Alles prima.

    Dann habe ich die Datei (Datenbank) wieder aufgerufen und wollte 2 weitere Piloten ergänzen.

    Das Ergebnis war, dass nun laut ObjectManager zwei Stored Classes gleichen Namens in der Datenbank stehen, die beide nur noch die neuen Piloten enthalten.

    Die Versuche haben ich mit vb.net 2008 und c#.net 2008 durchgeführt. Beide Programme führen zum gleichen Ergebnis.

    Im englischen Forum haben ich ähnliche Probleme gelesen, die aber nur bei Java auftragen. Bei .net nur, wenn aus unterschiedlichen Prozeduren ein Aufruf erfolgt.

    Was mache ich falsch oder wo liegt mein Denkfehler?

  •  09-05-2008, 04:17 PM 50922 in reply to 50909

    Re: Doppelte Stored Classes

    Hi,

    kannst Du mal ein möglichst vollständiges, aber kurzes Beispiel posten, weil ich aus deiner Beschreibung nicht so ganz schlau werde...klingt ein wenig so, als ob die Datenbankdatei beim Start deines Programmes gelöscht wird, aber so einfach wird der Fehler vermutlich ja nicht sein...;-)

    Grüße, Maik


    http://db4o.blogspot.com/
  •  09-06-2008, 04:02 PM 50940 in reply to 50922

    Re: Doppelte Stored Classes

    Hi,

    danke für die Anwort. Hier das Beispiel vs2008, c#:

    Zunächst die Klasse Pilot, aus db4o-6.4-tutorial.pdf

    public class Pilot

    {

    string _name;

    int _points;

    public Pilot(string name, int points)

    {

    _name = name;

    _points = points;

    }

    public string Name

    {

    get

    {

    return _name;

    }

    }

    public int Points

    {

    get

    {

    return _points;

    }

    }

    public void AddPoints(int points)

    {

    _points += points;

    }

    override public string ToString()

    {

    return string.Format("{0}/{1}", _name, _points);

    }

    }

     Dann die Hauptprogramme. Zunächst lasse ich Main laufen. Danach ist laut Output und ObjectManager alles ok.

    public class FirstStepsExample

    {

    public Boolean Main()

    {

    //File exitiert noch nicht

    IObjectContainer db = Db4oFactory.OpenFile("C:\\Daten\\vs08\\c#\\db4o\\db4o\\bin\\Debug\\test.yap");

    Pilot pilot1 = new Pilot("Michael Schumacher", 100);

    db.Set(pilot1);

    Pilot pilot2 = new Pilot("Rubens Barrichello", 99);

    db.Set(pilot2);

    Pilot proto = new Pilot(null, 0);

    IObjectSet result = db.Get(proto);

    foreach (object item in result)

    {

    Console.WriteLine(item);

    }

    db.Close();

    return true;

    //Alles ok!

    }

    Dann läuft Main1. Das File existiert bereits mit Daten von Main!

    public Boolean Main1()

    {

    //File existiert mit Daten von Main

    IObjectContainer db = Db4oFactory.OpenFile("C:\\Daten\\vs08\\c#\\db4o\\db4o\\bin\\Debug\\test.yap");

    Pilot pilot1 = new Pilot("Michael xyz Schumacher1", 100);

    db.Set(pilot1);

    Pilot pilot2 = new Pilot("Rubens xyz Barrichello1", 99);

    db.Set(pilot2);

    Pilot proto = new Pilot(null, 0);

    IObjectSet result = db.Get(proto);

    foreach (object item in result)

    {

    Console.WriteLine(item);

    }

    db.Close();

    return true;

    }

     

    }

    Nun existieren laut ObjectManger zwei gleiche Stored Classes?! Die Daten aus Main sind verschwunden. Unter beiden Stored Classen stehen die Daten aus Main1?! Der Output liefert die beiden Datensätze aus Main1.

    Meine Erwartung war: Nur eine Stored Class mit den zwei Datensätzen aus Main und den zwei aus Main1.

    Wo liegt der Fehler?

    Grüße, Uwe

  •  09-08-2008, 04:36 PM 50979 in reply to 50940

    Re: Doppelte Stored Classes

    Hi,

    der Code sieht ok aus, ich vermute mal, dass es hieran liegt:

    ".NET Reflection mechanism adds assembly name to class definition. If you use db4o database with 2 applications you'll have to move all persistent class definitions into a shared .dll. Identical classes compiled into different executables/libraries will be treated as different."

    http://developer.db4o.com/Resources/view.aspx/Reference/Platform_Specific_Issues/db4o_on_.NET_Platforms

    Bin aber selbst kein C#-Spezi (und habe auch gerade kein VS-C# installiert), von daher kann ich Dir dabei auch keine große Hilfe sein. In Java stellt sich das Problem so erstmal nicht...:-)

    Grüße, Maik


    http://db4o.blogspot.com/
View as RSS news feed in XML