如何存储双[]与实体框架代码优先方法阵列数据库(How to store double[] arra

2019-07-21 00:29发布

我怎么可以存储使用实体框架代码优先与现有的代码和架构设计没有影响双打的阵列,以数据库?

我看数据诠释和流利的API,我也考虑了双数组转换为字节字符串和字节到数据库存储在它自己的专栏。

我无法访问public double[] Data { get; set; } public double[] Data { get; set; } public double[] Data { get; set; }用流利的API特性,错误信息,然后我得到的是:

类型double[]必须以使用它作为参数“T”的非空值类型。

其中类Data存储成功存储在数据库中,而这一类的关系。 我唯一缺少的Data列。

Answer 1:

你可以做这样一件事:

    [NotMapped]
    public double[] Data
    {
        get
        {
            string[] tab = this.InternalData.Split(',');
            return new double[] { double.Parse(tab[0]), double.Parse(tab[1]) };
        }
        set
        {
            this.InternalData = string.Format("{0},{1}", value[0], value[1]);
        }
    }

    [EditorBrowsable(EditorBrowsableState.Never)]
    public string InternalData { get; set; }


Answer 2:

感谢大家的投入,由于你的帮助,我能够追踪解决这个的最好方法。 那就是:

 public string InternalData { get; set; }
 public double[] Data
 {
    get
    {
        return Array.ConvertAll(InternalData.Split(';'), Double.Parse);                
    }
    set
    {
        _data = value;
        InternalData = String.Join(";", _data.Select(p => p.ToString()).ToArray());
    }
 }

由于这些计算器帖子: 字符串双打阵列和双打的阵列到字符串



Answer 3:

我知道这是一个有点贵,但你可以这样做

class Primitive
{
    public int PrimitiveId { get; set; }
    public double Data { get; set; }

    [Required]
    public Reference ReferenceClass { get; set; }
}

// This is the class that requires an array of doubles
class Reference
{
    // Other EF stuff

    // EF-acceptable reference to an 'array' of doubles
    public virtual List<Primitive> Data { get; set; }
}

现在,这将单一实体(在这里“参考”)映射到您的原始类的“清单”。 这基本上是允许SQL数据库快乐,让你适当地使用你的数据的列表。

这可能无法满足您的需求,但将是一个方法,使EF快乐。



Answer 4:

如果你使用它会容易得多List<double>而不是double[] 你已经有一个存储您的表Data值。 你可能有一些表到你的双值存储在表的外键。 创建一个反映的是双打存储和映射类中添加外键映射表另一种模式。 这样,你就不需要添加这一个类属性检索或存储值的一些背景复杂的逻辑。



Answer 5:

纳丹·怀特有最好的答案(得到我的选票)。

这是乔佛里在克恩的答案,允许任何长度的名单(另​​)一个小的改进:

    [NotMapped]
    public IEnumerable<double> Data
    {
        get
        {
            var tab = InternalData.Split(',');
            return tab.Select(double.Parse).AsEnumerable();
        }
        set { InternalData = string.Join(",", value); }
    }

    [EditorBrowsable(EditorBrowsableState.Never)]
    public string InternalData { get; set; }


Answer 6:

不使用双[]使用List insted的。

像这样。

public class MyModel{
    ...
    public List<MyClass> Data { get; set; }
    ...
}

public class MyClass{
    public int Id { get; set; }
    public double Value { get; set; }
}

所有的解决方案,我看到也有不好的,这是因为:

  1. 如果创建表,你不想来存储这样的数据:“99.5,89.65,78.5,15.5”这是无效的! 首先它是一个字符串,它意味着,如果你可以键入字母到它,并在那一刻,当你的ASP.NET服务器调用double.Parse它会导致出现FormatException和你真的不想!

  2. 这是比较慢的,因为你的服务器必须解析字符串。 为什么解析,而不是从SQL Server获取几乎准备数据使用的字符串?



文章来源: How to store double[] array to database with Entity Framework Code-First approach