Похоже, вы встраивали GridFile
в User
, что-то вроде
class User
{
public GridFile ProfilePicture {get; set;}
}
Это не сработает;по крайней мере, не через поведение по умолчанию.GridFile
s должны рассматриваться как первоклассные граждане, и они должны храниться и извлекаться с использованием объекта GridFileCollection
:
var gridFS = conn.Database.Files();
var file = new GridFile();
// initialize file
gridFS.Save(file);
// query
var file2 = gridFS.FindOne(new { _id = file.Id });
// now, you can iterate file2.Content
Вы можете найти больше рабочих примеров кода в модульных тестах NoRM.
Причина в том, что, хотя GridFile
в основном является классом, как и любой другой, схема хранения для файлов сетки очень отличается.Хотя «обычные» объекты сериализуются на месте, и один документ всегда соответствует одному объекту, это не так для GridFile
.
Поскольку файлы могут быть намного больше максимального размера документа в MongoDB, они будут разбиты на chunks
.Таким образом, когда вы сохраняете GridFile
, драйвер должен будет хранить в файле сетки и количество фрагментов.По умолчанию размер чанков составляет 256 КБ, поэтому количество чанков будет зависеть от размера данных.Имена коллекций по умолчанию: fs.files
и fs.chunks
.
Вся эта логика находится в классе GridFileCollection
, поэтому она не будет выполняться, если вы просто храните встроенный объект GridFile
явного вызова расширения Files()
для получения GridFileCollection
.