替代泛型,允许在EF中存储相同类但具有不同属性类型的对象

时间:2016-05-27 12:56:43

标签: .net entity-framework sqlite database-design ef-code-first

所以,我有一个系统可以记录来自不同设备的不同类型的值。每个设备都可以提供应记录的多个值。

我需要描述每个设备,连接到设备的每个传感器的描述,传感器提供的不同类型值的描述(例如深度传感器的压力和温度),最后记录的集合每一个的价值再次。到目前为止我所尝试的是类似于:

// The device which the sensor is connected to
public class Device
{
    public int DeviceId { get; set; }
    public string Name { get; set; }
}

// A sensor that is connected to a Device. 
public class Sensor
{
    public int SensorId { get; set; }
    public int DeviceId { get; set; }
    public string Name { get; set; } // for example "Depth"
    public ICollection<SensorValueDescription> ValueDescriptions { get; set; }
}

// A description of a single value provided by a sensor (Such as "Degrees Celcius")
public class SensorValueDescription
{
    public int SensorId { get; set;}
    public int SensorValueDescriptionId { get; set; }
    public string Unit { get; set; } // for example "Bar or Degrees Celcius"
    public ICollection<SensorValue> SensorValues { get; set; }
}

// A single measurement
public class SensorValue 
{
    public int SensorValueDescriptionId { get; set; }
    public int SensorValueId { get; set; }
    public DateTime Timestamp { get; set; }
    public object Value { get; set; } // <-- This is the problem
}

这在.net中运行良好。我可以在SensorValue.Value中设置任何类型的值,然后读取类型并对此执行某些操作。

但是,尝试将此代码与Entity Framework一起使用时,不会为此属性创建任何列。

在一个DbContext中创建和保存带有传感器,SensorValueDescriptions和SensorValues的新设备到数据库,并在另一个DbContext中读回它们时,一切看起来都很好,除了SensorValueDescription.SensorValues始终为空。

我尝试使用Generics而不是使用object - 属性来制作解决方案,但我也没有做到这一点。

然后我开始思考如何在数据库中尝试模拟这样的东西,并且有点简短。

我想过要有不同的&#34;价值表&#34;对于每个不同的值类型:FloatValues,DoubleValues,StringValues,IntegerValues等,它们有一列用于时间戳,一列用于值。但是这会创建许多不同的表,我会以某种方式根据值的类型加入不同的表名。

然后我开始考虑像稀疏表一样对其进行建模,其中我为每个值类型都有一个列,但只有具有正确类型的列才会填充给定的行。但是,这似乎在我的.net代码中使用会很痛苦。

更糟糕的是,某些传感器可以返回一个样本,该样本是任何支持类型的数组。

对于这样的事情,什么是好的解决方案?从理论上讲,手头的任务看起来很简单,但我找不到一个好的解决方案。

0 个答案:

没有答案