【问题标题】:Entity Framework 6 Persist a MathNet.Numerics MatrixEntity Framework 6 保留一个 MathNet.Numerics 矩阵
【发布时间】:2015-09-23 15:01:19
【问题描述】:

我们有一个包装MathNet.Numerics矩阵的类:

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

    public int? DatabaseId { get; set; }

    // ...
}

我们需要使用Entity Framework 将这个Matrix 存储在数据库中。实体框架目前忽略此属性。我正在使用 Fluent API 映射,目前已进行此设置:

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

如何使用 Entity Framework 将我的 Math.Net Numerics Matrix 包装器持久保存在数据库中,包括 _matrix 属性?表格结构应该是什么?(我使用的是Npgsql,所以我必须自己构建表格。)提前致谢。

【问题讨论】:

  • 你知道这在内部是否总是一个密集矩阵,或者它也可以是例如稀疏还是对角线?
  • 我会准备一个byte[](代表Matrix&lt;double&gt;)的序列化属性,这意味着您将其保存为数据库中的二进制文件。您需要另一个未映射的属性(甚至是辅助方法)来将byte[] 解析/反序列化为Matrix&lt;double&gt;。但是,不能在 Linq-To-Entity 查询中使用反序列化的属性或辅助方法。

标签: c# entity-framework matrix entity-framework-6 mathnet-numerics


【解决方案1】:

您可能需要某种代理以合理的方式执行此操作,因此它实际上将字符串或二进制 blob 写入数据库(而不是尝试分解类型及其成员)。

例如,您可以将其序列化为MatrixMarket 格式(字符串,可选择压缩为二进制流;非常简单,但您可能会丢失一些精度),或MATLAB(二进制流;目前只有旧的Level-5支持格式)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-12-30
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 2017-08-05
    • 1970-01-01
    • 1970-01-01
    • 2014-09-08
    相关资源
    最近更新 更多