ORM和构造函数

时间:2009-05-05 20:54:42

标签: .net orm

我正在研究.NET ORM实现,我有一个主要的问题 - 是否有任何.NET ORM实现不需要数据库中每个字段的公共属性?当我看到像this这样的例子时,我脑子里传来一个小铃铛。我坚定地相信封装,并且被迫打开我的对象的和服只是为了让它们与持久性框架很好地协同工作,这给了我一些heebie-jeebies。所有ORM都需要这种可访问性吗?如果没有,指出那些不需要它的例子!

7 个答案:

答案 0 :(得分:6)

NHibernate支持类成员的多种访问策略。公共属性是事实上的默认属性,但您可以告诉NHibernate直接访问您的类的字段。

e.g。

<property name="CustomerName" access="field.camelcase-underscore" />

将指示NHibernate在您的类中使用如下所示的字段:

protected string _customerName;

答案 1 :(得分:1)

实体框架也支持这一点。您可以为每个属性定义访问修饰符,并为getter和setter单独定义。

答案 2 :(得分:1)

Mindscape LightSpeed仅绑定到字段 - 仅为您希望公开的字段添加属性(这是唯一方式,因为封装的明确原因)。当然,工具将默认提供属性,但它们都可以关闭。

Mindscape LightSpeed O/R Mapper

答案 3 :(得分:0)

查看Scott Gu的书呆子晚餐教程。 LINQ和MVC允许您创建一个业务层,用于包装公共和私有属性中的DB对象。

http://weblogs.asp.net/scottgu/archive/2009/03/10/free-asp-net-mvc-ebook-tutorial.aspx

答案 4 :(得分:0)

您的意思是您希望将私有或受保护的成员映射到数据库,而不是将它们全部公开?我使用的一个ORM可以做到Gentle.NET。它很稳定,但最近并没有真正得到很多更新。

答案 5 :(得分:0)

Harper - 我对Linq-To-SQL的看法几乎一样,直到我意识到你关于如何看待ORM的全部内容......它有助于将Linq2SQL视为“强类型ADO”。 NET提供商“......

如果您只想在几个字段中“快速查看”,那么LINQ投影将向您返回仅包含您感兴趣的字段的匿名类型。这意味着实体类的大小与您查询的网络和内存性能无关。

在频谱的另一端,DataContexts(或其他ORM中的UnitOfWork)通常是您使用并尽快处理的东西。因此,随之而来的是,它们产生的实体应该仅限于其作为“数据持有者”。换句话说,如果你想构建复杂的或长的对象,可以单独从LINQ实体(即不同的类)设计它们,只需使用L2S来填充/实现这些对象。

答案 6 :(得分:-1)

LINQ to SQL可以绑定到私有字段,但它但完全支持私有无参数构造函数。