Я пытаюсь использовать MongoDB для кэширования некоторых данных для меня, но я не могу получить код для возврата определенной коллекции.Я могу получить другие коллекции без проблем, но из-за этого я не могу заставить их работать, и я понятия не имею, почему.Единственная ошибка, которую я получаю:
Неоднозначность дискриминатор 'revamp@904'
Я искал долго и упорно каких-либо указаний относительно того, что это означает.Вот код, который я использую:
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)
Этот код работал на днях, затем что-то изменилось, и я не могу понять, что происходит.
ОБНОВЛЕНИЕ: Добавлен начальный код сохранения выше