Pergunta

Eu tenho o seguinte código:

 Assert.IsTrue(Repository.FindAll<string>().Count() == 0);
 string newString = "New String";
 Repository.Save(newString);
 Assert.IsTrue(Repository.FindAll<string>().Count() == 1);

Mas está falhando. Acho que tem algo a ver com o fato de que eu estou economizando uma string.

código My Save () é o seguinte:

  public void Save<T>(T obj)
  {
     if (obj == null)
        throw new ArgumentNullException("obj not allowed to be null");

     Db.Store(obj);
     Db.Commit();
  }

deve ser o meu classes persistentes têm algo de especial? Ou posso apenas salvar praticamente qualquer coisa com db4o?

Foi útil?

Solução

Tanto quanto eu sei, primitivas de plataforma, mesmo que eles podem ser tipos de referência (como System.String), só serão armazenados se uma instância é uma criança de outro objeto (ou seja referenciado em um campo) e, em seguida, esse objeto está armazenado. Portanto, chamando Store () em uma primitiva em C # ou Java não irá salvá-lo. Basicamente, você vai precisar criar uma entidade para fazer referência a suas cordas, a fim de salvá-los; muito da mesma forma que você precisa para criar uma tabela para salvar cordas para um RDBMS.

public class StringEntity
{
   private readonly string value;

   public StringEntity(string value)
      : base()
   {
      this.value = value;
   }
}

...

Assert.IsTrue(Repository.FindAll<StringEntity>().Count() == 0);
Repository.Save(new StringEntity("New String"));
Assert.IsTrue(Repository.FindAll<StringEntity>().Count() == 1);

EDIT: ou ainda melhor

public class Primitive<T>
{
   private readonly T value;

   public Primitive(T value)
      : base()
   {
      this.value = value;
   }
}

...

Assert.IsTrue(Repository.FindAll<Primitive<string>>().Count() == 0);
Repository.Save(new Primitive<string>("New String"));
Assert.IsTrue(Repository.FindAll<Primitive<string>>().Count() == 1);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top