Question

Apparemment, le site de db4o a récemment été refait, et maintenant vieux urls sont donne 404 erreurs. Chaque fois que je pense que je l'ai trouvé la réponse, je reçois une erreur 404.

J'ai une base de données simple db4o j'ai de configuration pour stocker les gens.

public class Person
{
     public string Firstname { get; set;}
     public string Lastname {get;set;}
}

Je suis en mesure d'exécuter des requêtes LINQ sur la base de données, et tout fonctionne à merveille. Je suis la programmation dans un environnement web, donc je vais avoir besoin de quelqu'un d'identifier et d'aller chercher des objets uniques à partir de la base de données, donc je configure simplement la base de données à utiliser UUID. Maintenant, le problème est devenu, comment puis-je obtenir des informations UUID des objets que je reçois de la requête Linq?

Par exemple, disons que je reçois toutes les personnes stockées dans la base de données, et je besoin de générer l'URL unique pour chaque personne. Je vais utiliser le UUID pour le faire. Je vais courir ceci:

var people = (from Person p in db select p).ToList();

Et puis je vais parcourir la liste

foreach( Person person in people)
{
  DoSomething(person);
}

La meilleure solution serait faire l'UUID une propriété sur la classe de personne, de sorte que je pouvais:

var uuid = person.UUID;

Je ne vois pas un mécanisme pour le faire cependant. Est-ce que je manque quelque chose?

Était-ce utile?

La solution

Je l'ai déjà répondu à cette mais ensemble avec d'autres questions. Par conséquent, je réponds à nouveau: Dans db4o vous avez normalement pas id. db4o utilise le -identité d'objet pour distinguer l'objet de l'autre. Ainsi, le même objet en mémoire va être le même objet pour la base de données.

Tant un vous ne vous opposez pas sérialisez cela fonctionne bien, vous n'avez pas besoin ID. Cependant, dès que les objets sont sérialisés / déconnecté cela ne fonctionne plus (typique pour web-apps).

Je pense que ces trois options sont possibles:

Bien sûr, vous pouvez créer une classe de base qui fournit l'ID-propriété avec l'une des implémentations ci-dessus.

Autres conseils

D'accord, voici ce que j'ai prototypé rapidement, et il semble fonctionner. Tout d'abord, j'ai créé une classe de base pour tous mes objets de données. En ce moment, tout ce qu'il a est un entier champ Id, bien que je vais probablement l'utiliser pour d'autres choses.

Ensuite, je créé une méthode d'extension sur IObjectContainer.

public static class db4oExtensions
{
    public static void StoreWithId(this Db4objects.Db4o.IObjectContainer db, DataObject dao)
    {
        int count = (from DataObject datao in db select datao.Id).Max();
        dao.Id = count + 1;
        db.Store(dao);
    }
}

Alors maintenant, quand je stocke un objet dans la db, je vais appeler StoreWithId au lieu de magasin. Quelques tests semblent montrer que cela fonctionne. Maintenant, un problème que je vois est si je supprime l'objet avec la valeur maximale, je vais avoir deux objets ids identiques, mais les deux n'existe pas en même temps. Je vais trouver la réponse à plus tard, peut-être simplement en stockant un incrémenteur int dans la base de données elle-même qui est que jamais accessible par StoreWithId.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top