【发布时间】:2019-07-30 19:40:24
【问题描述】:
在 EF Core 2.2 中使用代码优先时我遇到了困难。
我有一个名为:AirSensor 的实体,我需要与 TemperatureSensor 建立两个一对一的关系,因为 AirSensor 能够读取温度和露点温度。
因此我的代码在这里:
public class AirSensor
{
public long AirSensorId { get; set; }
public TemperatureSensor TemperatureSensor { get; set; }
public HumiditySensor Humidity { get; set; }
public Enthalpy EnthalpyCalc { get; set; }
public TemperatureSensor DewPointTemperatureSensor { get; set; }
public long TemperatureSensorId { get; set; }
public long HumiditySensorId { get; set; }
public long EnthalpyId { get; set; }
public long DewPointTemperatureSensorId { get; set; }
}
温度实体是:
public class TemperatureSensor
{
public long TemperatureSensorId { get; set; }
public string Name { get; set; }
public float CurrentValue { get; set; }
public DateTime LastUpdated { get; set; }
public ICollection<TemperatureMeasurement> Measurements { get; set; }
}
添加迁移后一切正常,但更新数据库时失败:
执行 DbCommand 失败 (17ms) [Parameters=[], CommandType='Text', CommandTimeout='30']
ALTER TABLE [AirSensors] 添加约束 [FK_AirSensors_TemperatureSensors_DewPointSensorId] 外键 ([DewPointSensorId]) 引用 [TemperatureSensors] ([TemperatureSensorId]) ON DELETE CASCADE; System.Data.SqlClient.SqlException (0x80131904): Si especifica la restrictción FOREIGN KEY 'FK_AirSensors_TemperatureSensors_DewPointSensorId' en la tabla 'AirSensors', podrían producirse ciclos o múltiples rutas en cascada。 Especifique ON DELETE NO ACTION o UPDATE NO ACTION, o bien modifique otras restrictciones FOREIGN KEY。
但是,我没有看到这里的问题,我只想有两个单独的一对一关系。
我错过了什么?
非常感谢!
【问题讨论】:
-
您是否在 dbcontext 中进行任何自定义映射?您可能必须在 AirSensor 类上明确标记您的 ForeignKeys。
-
无自定义映射。但有趣的是,它只适用于一对一的关系
-
看这个问题,特别是
OnModelCreating中的流畅API映射:stackoverflow.com/questions/5559043/… -
让我知道是否这样做或者您是否需要进一步的帮助
标签: asp.net-core entity-framework-core ef-core-2.2