문제

다음 코드가 있습니다.

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

그러나 실패합니다. 나는 그것이 줄을 저장하고 있다는 사실과 관련이 있다고 생각합니다.

내 저장 () 코드는 다음과 같습니다.

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

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

내 지속적인 수업에 특별한 것이 있어야합니까? 아니면 DB4O로 거의 저장할 수 있습니까?

도움이 되었습니까?

해결책

내가 아는 한, 플랫폼 프리미티브는 기준 유형 (예 : System.String) 일 수 있지만 인스턴스가 다른 객체의 자식 (즉, 필드에서 참조) 인 경우에만 저장된 다음 해당 객체가 저장됩니다. 따라서 C# 또는 Java의 원시인으로 Store ()을 호출해도 저장되지 않습니다. 기본적으로 문자열을 저장하기 위해 문자열을 참조하기 위해 엔티티를 만들어야합니다. 문자열을 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);

편집 : 또는 더 나은

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);
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top