按照DDD方法,我为信号和样本建立了一个聚合实体模型。示例实体在这里:
/// <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属性,以便样本可以成为Signal Aggregate上集合的一部分。
由于我正在使用EFCore,并且鉴于可能有成千上万个与信号相关的样本,所以我一直在使用EFCore.BulkExtensions管理样本的CRUD操作,并避免使用内置的实体跟踪器。
我遇到的问题是BulkExtensions,我认为它基于的SQLBulkCopy无法识别Sample
实体上的私有影子属性。
将其从private
翻转到public
可以解决此问题,但确实违反了隐藏实现细节的原则。
有没有解决这个问题的方法,还是我需要忍受肮脏的代码,因为它在Signal
聚合中并不算太坏。