Couchbase存储复杂的时间不发射

时间:2012-03-19 16:35:33

标签: complextype couchbase

我正在使用Couchbase 1.8在缓存中存储一​​系列复杂实体。

非常简单的场景,所有在一个控制台应用程序中似乎都可以找到。但是,当我将相同的“想法”重构为不同的集合时,似乎没有任何效果。

控制台应用程序:

[Serializable]
public class Entity : EntityBase<Entity>
{
    public string Title { get; set; }
    public Entity() { }
}

public abstract class EntityBase<T> : IEntity<T> where T : new()
{
    public string Name { get; set; }
    public List<T> Get() { return null; }
}

public interface IEntity<T> where T : new()
{
    Name { get; }
    List<T> Get();
}

然后在Console应用程序中,我用以下方法测试:

// client = new CouchbaseClient();
List<Entity> e = new List<Entity> { new Entity { Title = "Entity1" } };
client.Store(StoreMode.Set, "EntityItem", e);
List<Entity> output = client.Get<List<Entity>>("EntityItem"); // return 1 item

但是,当我重构相同的代码时,似乎没有存储任何内容:

// assembly called Entity.Core

// 1. Entity

[Serializable]
[EntityAttribute(Description = "description")]
public class Entity : EntityBase<Entity>
{
    public string Title { get; set; }
    public Entity() { }
}

// 2. EntityBase
public abstract class EntityBase : IEntity<T> where T : new()
{
    private Couchbase _client = new CouchbaseClient("vBucket", "vBucketPassword");
    public string Name { get; set; }

    public static T Instance { get { return Singleton<T>.Instance; } }

    private IEnumerable<T> ToCache<T>() where T : new() { // gets items from my data source }

    public List<T> Get()
    {
        List<T> entity = this._client.Get<List<T>>(this.Name);

        // if not in cache, call ToCache<T>() to get the object, cache it and return

        return entity;
    }
}

// 3. IEntity is the same as above

// 4. Singleton<T> is a class that constructs a singleton pattern based on the T

当我在控制台应用程序中测试它时,名称会在缓存中分配,但该项始终为null,从缓存返回?

// client = new CouchbaseClient();
List<Entity> entity = Entity.Instance.Get(); // returns, for example 4 items as expected
client.Store(StoreMode.Set, "EntityItem", entity); // should store List<Entity>[4] in cache
List<Entity> output = client.Get<List<Entity>>("EntityItem"); // returns null

我假设是因为我试图在我的实体定义的抽象类中定义客户端和实体?这种推理可能吗?

更新 我修改了我的测试以将CouchbaseClient实例传递给.Get()方法。似乎是,在EntityBase类中使用了CouchbaseClient引用。通过这种方式,我不是百分之百卖出。

1 个答案:

答案 0 :(得分:0)

在初始化时将存储桶用户名和密码作为配置值传递给客户端。一个空白的构造函数在我的场景中没有说出来。