몇 년 동안 사용해오고 있지만 일종의 순환 참조 문제로 인해 속도가 느려지는 Entity Framework (버전 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
를 인스턴스화하기 때문에 추가 할 첫 번째 영원히 취하고
Sensor
인스턴스에서
Samples
컬렉션에 추가합니다.
Sensor sensor = GetSensor(1);
SensorSample sample = new SensorSample();
sample.SampleTime = d.Timestamp;
sample.SensorId = sensor.Id;
sensor.SensorSamples.Add(sample);
어떻게하면 SensorSamples
기존의 enitire 수집을 인스턴스화하지 않고 Sensor
에 SensorSamples
에 샘플을 추가 할 수 있습니까? 현재 AutoDetectChangesEnabled
을 false로 설정하고 을 SaveChanges
직전까지 지연합니다. 이것은 아무런 차이가 없습니다. 나는 LazyLoading
을 끄지 않았지만, 나는이 상황에서 기대했던 것처럼 발로 차있는 것처럼 보이지 않는다. 공개 리스너가없는 생성자를 갖는 것과 같은 LazyLoading에 대한 모든 요구 사항이 충족된다고 생각합니다. 내가 놓친 게 있니? 왜 이런 일이 일어나고 있는거야? 감사.
왜 게으른 로딩을 끄지 않았습니까 ('LazyLoadingEnabled = false')? –