Следуя подходу DDD, я настроил модель Aggregate Entity для сигналов и образцов. Образец сущности находится здесь:
/// <summary>
/// Basic Sample entity
/// </summary>
public class Sample : BaseEntity
{
private Sample()
{
// Required for EFCore
}
/// <summary>
/// Initializes a new instance of Sample
/// </summary>
/// <param name="timeStamp">Time stamp</param>
/// <param name="value">double or null</param>
public Sample(DateTime timeStamp, double? value) : this()
{
this.TimeStamp = timeStamp;
this.Value = value;
}
/// <summary>
/// Gets or sets SignalId - shadow property for EfCore
/// </summary>
private int SignalId { get; set; }
/// <summary>
/// Gets or sets TimeStamp
/// </summary>
public DateTime TimeStamp { get; private set; }
/// <summary>
/// Gets or sets Value
/// </summary>
public double? Value { get; set; }
}
SignalId
- это свойство shadow, настроенное таким образом, чтобы сэмплы могли быть частью коллекции в совокупности сигналов.
Поскольку я использую EFCore и учитывая, что могут быть тысячи выборок, связанных с сигналом, я использую EFCore.BulkExtensions для управления действиями CRUD для выборок и избегая встроенного средства отслеживания сущностей.
Проблема, с которой я столкнулся, заключается в том, что BulkExtensions, и я думаю, что SQLBulkCopy, на котором он основан, не может распознать частное свойство shadow для сущности Sample
.
Переключение с private
на public
устраняет проблему, но нарушает принцип сокрытия деталей реализации, которые кажутся грязными.
Есть ли способ обойти эту проблему, или мне просто нужно жить с грязным кодом, учитывая, что он в совокупности Signal
не так уж и плох.