我有一个实体框架(版本5)实现已经工作多年的以下数据库结构,但由于某种循环引用问题变得越来越慢。实体框架不延迟加载FK集合添加
[Table("Sensors", Schema = "Ems")]
public class Sensor
{
public Sensor()
{
SensorSamples = new List<SensorSample>() as ICollection<SensorSample>;
}
[Key]
public int Id { get; set; }
[Required, MaxLength(128)]
public string Name { get; set; }
[MaxLength(256)]
public string Description { get; set; }
[MaxLength(128)]
public string Location { get; set; }
[Required]
[MaxLength(15)]
public string IPAddress { get; set; }
[Required]
public int Port { get; set; }
[Required]
public bool Enabled { get; set; }
[Required, ForeignKey("Type")]
public int SensorTypeId { get; set; }
public virtual SensorType Type { get; set; }
[Required, ForeignKey("Network")]
public int SensorNetworkId { get; set; }
public virtual SensorNetwork Network { get; set; }
public virtual ICollection<SensorSample> SensorSamples { get; set; }
}
[Table("SensorSamples", Schema = "Ems")]
public class SensorSample
{
public SensorSample()
{
SampleData = new List<SampleData>() as ICollection<SampleData>;
}
[Key]
public int Id { get; set; }
[Required, ForeignKey("Sensor")]
public int SensorId { get; set; }
public virtual Sensor Sensor { get; set; }
[Required]
public DateTime SampleTime { get; set; }
[Required]
public virtual ICollection<SampleData> SampleData { get; set; }
}
[Table("SampleData", Schema = "Ems")]
public class SampleData
{
public SampleData()
{
}
[Key]
public int Id { get; set; }
[Required, ForeignKey("DataType")]
public int SampleDataTypeId { get; set; }
public virtual SampleDataType DataType { get; set; }
[Required, ForeignKey("Unit")]
public int SampleUnitId { get; set; }
public virtual SampleUnit Unit { get; set; }
[Required, ForeignKey("Sample")]
public int SensorSampleId { get; set; }
public virtual SensorSample Sample { get; set; }
[MaxLength(128)]
public string Value { get; set; }
}
当我使用下面的代码添加新SensorSample
,它永远在第一个要添加,因为它实例化一个SensorSample
,并将其添加到收藏Samples
上Sensor
实例。
Sensor sensor = GetSensor(1);
SensorSample sample = new SensorSample();
sample.SampleTime = d.Timestamp;
sample.SensorId = sensor.Id;
sensor.SensorSamples.Add(sample);
我怎样才能在Sensor
样品添加到SensorSamples
没有它存在的实例的SensorSamples
的enitire收藏?我目前有AutoDetectChangesEnabled
设置为false,并延迟DetectChanges
,直到在SaveChanges
之前。这没有什么区别。我还没有关闭LazyLoading
,但它似乎并没有像我期望的那样踢进去。我认为LazyLoading满足所有要求,例如具有公共无参数构造函数。我错过了什么吗?任何想法为什么发生这种情况?谢谢。
为什么你没有关闭延迟加载('LazyLoadingEnabled = false')? –