这在概念上与我的问题有关 here .但是,我一直在玩 NHibernate,并意识到我的问题的真正核心是什么。
在经典的 OO 设计中,为了正确封装数据,将值传递给存储在数据成员(字段)中的对象构造函数是一种常见的模式。那些不应更改的值仅通过访问器(只读属性)公开。允许更改的那些同时具有访问器和修改器(读写属性)。在我看来,一个 正确 O/RM 应该尊重这些约定,并在创建对象时使用可用的构造函数。依赖读写属性、反射或其他黑客(恕我直言)方法似乎......错误。
是否有 .NET O/RM 解决方案可以做到这一点?
编辑
为了解决 Praveen 的观点,我知道有些项目具有用于选择构造函数的“默认”算法 - 例如,StructureMap 始终使用具有最多参数的构造函数,除非您使用自定义属性标记构造函数。我可以看到这是处理这种情况的有效方法。也许在 ORM 之外使用 IoC 容器将提供我需要的那种解决方案 - 尽管在我看来,虽然这本身并不坏,但对于使用 ORM 来说,这是一个不必要的额外步骤。
最佳答案
我认为大多数 ORM 实际上都支持这个概念,至少 DataObject.Net 支持。此代码按预期工作:
[HierarchyRoot(typeof(KeyGenerator), "Id")]
public class Message : Entity
{
[Field]
public int Id { get; private set; }
[Field(Length = 100)]
public string Text { get; private set; }
public Message(string Text)
{
Text = text;
}
}
编辑: DataObjects 以内部事务状态存储数据,并使用 PostSharp 生成的特殊物化构造函数。当然,ORM 使用 poco 对象也不是那么简单。
关于.net - 是否有任何 .NET ORM 使用构造函数 "properly"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/926668/