Entity Framework 6 Сохранение матрицы MathNet.Numerics

У нас есть класс, обертывающий матрицу MathNet.Numerics:

public class Matrix
{
    public MathNet.Numerics.LinearAlgebra.Matrix<double> _matrix { get; set; }

    public int? DatabaseId { get; set; }

    // ...
}

Нам нужно сохранить это Matrix в базе данных с помощью Entity Framework. В настоящее время Entity Framework игнорирует это свойство. Я использую сопоставление Fluent API и в настоящее время настроил это:

modelBuilder.Entity<Matrix>()
       .HasKey(matrix => matrix.DatabaseId);

Как я могу использовать Entity Framework для сохранения моей оболочки Math.Net Numerics Matrix в базе данных, включая свойство _matrix? Какой должна быть структура таблицы? (я использую Npgsql, поэтому мне нужно построить таблицы себя.) Заранее спасибо.


person Scotty H    schedule 23.09.2015    source источник
comment
Знаете ли вы, всегда ли это плотная матрица внутри, или это также может быть, например, разреженный или диагональный?   -  person Christoph Rüegg    schedule 23.09.2015
comment
Я бы подготовил сериализованное свойство byte[] (представляющее Matrix<double>), это означает, что вы сохраняете его как двоичный файл в базе данных. Вам нужно другое несопоставленное свойство (или даже вспомогательный метод) для синтаксического анализа/десериализации byte[] в Matrix<double>. Однако это десериализованное свойство или вспомогательный метод нельзя использовать в запросе Linq-To-Entity.   -  person Hopeless    schedule 23.09.2015


Ответы (1)


Вам, вероятно, понадобится какой-то суррогат, чтобы сделать это разумным способом, поэтому он фактически записывает строку или двоичный объект в базу данных (вместо того, чтобы пытаться разложить тип и его члены).

Например, вы можете сериализовать его в формат MatrixMarket (строка, необязательно сжатая в двоичный поток; очень простой, но вы можете потерять некоторую точность) или MATLAB (двоичный поток; в настоящее время только старый уровень- 5 поддерживается формат).

person Christoph Rüegg    schedule 23.09.2015