Redis GetObjectByID

时间:2018-02-13 10:58:57

标签: c# mongodb casting redis bson

我正在尝试使用以下函数获取对象,虽然这对于Medicine和MedicineBlock类型的对象工作正常,但我遇到了MedicineStorage的问题,这是应该在Redis中设置数据的部分,这是函数的代码。

const ASC = 'ascending';
const DSC = 'descending';

function sortByTitle(a, b, order = ASC) {
    ...
}

function sortByStatus(a, b, order = ASC) {
    ...
}

function render() {
    let sortChoice = ... // from `props` perhaps?

    const data = store.results.data;
    switch (sortChoice) {
        case 'title':
            data.sort(sortByTitle);
            break;

        case 'status':
            data.sort(sortByStatus);
            break;

        ...
    }

    return {data.map(result =>
      <ResultItem 
        key={result.id}
        title={result.title}
        description={result.description}
        start_date={result.start_date}
        end_date={result.end_date}
        vendor_name={result.vendor.name}
        buyer_name={result.buyer.name}
        preview_file={result.preview_file}
        status={result.status}
      />
    )}
}

我得到的错误是System.InvalidCastException:'无法将'MongoDB.Bson.BsonObjectId'类型的对象强制转换为'MongoDB.Bson.BsonBoolean'。'

以下是其他类似功能的示例,没有任何问题。

public RedisMedicine()
    {
        cache = new RedisClient(RedisConfig.SingleHost);
    }

public MedicineStorage GetMedStorageById(ObjectId id)
    {
        prepareConnection();
        cache.As<MedicineStorage>();
        MedicineStorage meds = cache.Get<MedicineStorage>("MedicineStorage" + id.ToString());
        if (meds != null)
        {
            cache.Set<MedicineStorage>("MedicineStorage" + meds.storageName, meds, new TimeSpan(0, 2, 0, 0));
            return meds;
        }
        else
        {
            MongoCollection medsCollection = db.GetCollection<MedicineStorage>("storage");
            meds = medsCollection.FindOneByIdAs<MedicineStorage>(id);
            cache.Set<MedicineStorage>("MedicineStorage" + meds.storageName, meds, new TimeSpan(0, 2, 0, 0));
            return meds;
        }
    }

在调试模式下运行我可以看到该对象实际存在且具有所有正确的值但由于某种原因它不能设置为Redis。对解决方案有任何想法吗?

0 个答案:

没有答案