我有一個實體框架(版本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')? –