【问题标题】:Db4O - Can I save a String?Db4O - 我可以保存字符串吗?
【发布时间】:2009-10-23 22:58:32
【问题描述】:

我有以下代码:

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

但它失败了。我想这与我正在保存一个字符串这一事实有关。

我的 Save() 代码是这样的:

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

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

我的持久类应该有什么特别的吗?或者我可以用 db4o 保存几乎任何东西?

【问题讨论】:

    标签: c# persistence db4o object-persistence


    【解决方案1】:

    据我所知,平台原语,即使它们可能是引用类型(如 System.String),也只会在实例是另一个对象的子对象(即在字段中引用)然后是该对象时存储被储存了。因此,在 C# 或 Java 中对原语调用 Store() 不会保存它。基本上,您需要创建一个实体来引用您的字符串以保存它们;与创建表以将字符串保存到 RDBMS 的方式非常相似。

    公共类 StringEntity { 私有只读字符串值; 公共 StringEntity(字符串值) : 根据() { this.value = 值; } } ... Assert.IsTrue(Repository.FindAll().Count() == 0); Repository.Save(new StringEntity("New String")); Assert.IsTrue(Repository.FindAll().Count() == 1);

    编辑: 或者更好

    公共类 Primitive { 私有只读 T 值; 公共基元(T 值) : 根据() { this.value = 值; } } ... Assert.IsTrue(Repository.FindAll>().Count() == 0); Repository.Save(new Primitive("New String")); Assert.IsTrue(Repository.FindAll>().Count() == 1);

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-30
      • 2018-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-11
      • 1970-01-01
      相关资源
      最近更新 更多