假设我有以下 C# 类,我希望它是不可变的。您只能使用参数化构造函数来设置它。
public class InsulineInjection
{
private InsulineInjection()
{
// We don't want to enable a default constructor.
}
public InsulineInjection(Millilitre millilitre, DateTime dateTime, string remark)
{
this.Remark = remark;
this.DateTime = dateTime;
this.Millilitre = millilitre;
}
public string Remark { get; private set; }
public DateTime DateTime { get; private set; }
public Millilitre Millilitre { get; private set; }
}
现在我想使用 ORM 来创建这个 POCO。但是,据我所见,所有 .NET ORM 都期望属性是可访问的,并且具有能够创建此 POCO 的公共构造函数。所以我不得不把我的 POCO 改成这样:
public class InsulineInjection
{
public InsulineInjection()
{
}
public InsulineInjection(Millilitre millilitre, DateTime dateTime, string remark)
{
this.Remark = remark;
this.DateTime = dateTime;
this.Millilitre = millilitre;
}
public string Remark { get; set; }
public DateTime DateTime { get; set; }
public Millilitre Millilitre { get; set; }
}
然而,这使我的 POCO 再次可变。使用它的人可以在之后简单地更改任何我不想要的属性。
据我所知,我可以通过两种不同的方式解决这个问题:
- 编写我自己的数据访问层(或修改 orm),以便能够使用我创建的构造函数创建正确的 POCO 实例。
- 创建某种映射器。让 ORM 创建简单的 DTO 对象,并在适当的时候使用映射器将 DTO 对象转换为我的 POCO。
我倾向于解决方案2。有人有如何做到这一点的例子吗?或者有人有比我上面描述的更好的解决方案吗?