سؤال

ولدي البرمجية التالية:

 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 # أو جافا لا حفظه. في الأساس، وسوف تحتاج إلى إنشاء كيان مرجع سلاسل الخاص من أجل إنقاذها. بنفس الطريقة التي كنت بحاجة لإنشاء جدول من أجل إنقاذ سلاسل إلى 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