.net - 是否有任何 .NET ORM 使用构造函数 "properly"?

标签 .net orm

这在概念上与我的问题有关 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/

相关文章:

c# - 什么是NullReferenceException,如何解决?

java - Hibernate:在没有表的情况下按字段加载类

C# - 使用 File.WriteAllLines

java - org.hibernate.MappingException : Could not determine type for: java. util.List,在表 : College, 的列 : [org. hibernate.mapping.Column(students)]

php - 从多个记录中获取主键-laravel

Django:prefetch_相关结果按中间表的字段排序

java - 为什么 Hibernate 两次选择相同的列?

.net - Sync Framework 2.0错误:不支持指定的更改跟踪操作

.net - 目标框架不匹配

.net - 拆分容器,制作固定面板