MongoDBを使用して私のためにデータをキャッシュしようとしていますが、特定のコレクション。私は問題なしで他のコレクションを手に入れることができますが、これは動作させることができず、理由が分かりません。私が得る唯一のエラーは、次のとおりです。エラーを取得するF#のMongoDBから "Ambiguous discriminator 'revamp @ 904"(C#libを使用)
あいまいな弁別
'[email protected]'
私はこれが何を意味するのかについての兆候のために長いとハード検索しました。ここで私が使用しているコードです:
let GetCacheDataObject ctxName cacheName collection =
let ctx = new DataContext(ctxName)
let q = Query.EQ("CacheName", BsonValue.Create(cacheName.ToString()))
let entity =
match ctx.Db.CollectionExists(collection) with
| false -> null
| _ -> ctx.Db.GetCollection(typeof<DataObject>, collection).FindOneAs<DataObject>(q)
entity
それは彼の「FindAsOne」、このエラーがスローされます一度。
DataObjectは、データを保持する非常に基本的なカスタムオブジェクトです。
public class DataObject:IHaveIdentifier
{
public BsonObjectId _id { get; set; }
//public long Id { get; set; }
public string[] Columns { get; set; }
public IEnumerable<object[]> Rows { get; set; }
public string CacheName { get; set; }
public int GetColumnIndex(string column)
{
for (int i = 0; i < this.Columns.Length; i++)
if (this.Columns[i] == column)
return i;
return -1;
}
}
そしてIHaveIdentifierインターフェースはかなり基本的なものです::ここでは定義があります
public interface IHaveIdentifier
{
BsonObjectId _id { get; set; }
}
ここで最初の場所にデータを保存するために使用されたコードは次のとおりです。
member x.Save<'T when 'T :> IHaveIdentifier>(entity:'T, collection:string) =
if (entity._id = null) then x.Insert<'T>(entity, collection)
else
x.Delete(entity, collection)
x.Insert<'T>(entity, collection)
x.VerifyNoErrors()
let CacheDataObject<'T when 'T :> IHaveIdentifier>(entity:'T, ctxName, collection) =
let ctx = new DataContext(ctxName)
ctx.Save(entity, collection)
このコードは、先日働いていて何か変わってしまって、何が起こっているのか分からないようです。
UPDATE:
「revamp」は、seq.fsのFSharp.Coreで使用される識別子です。 (私はおそらくこのコードはlambdaや何かの引数名の中にあるかもしれないと推測しているでしょうか?) – Brian
ブライアン、私はそれを考えていましたが、どうやって見ることができませんでした。唯一のパラメータは、渡されるすべての文字列です。どのように私はそれをトレースするかもしれないのアイデアはありますか? – Erick