2

这个问题是关于为什么我会使用上述关键字。我发现很多 MSDN 页面解释了如何。我正在寻找原因。

我要写什么查询意味着我需要它们?我问是因为我发现的例子似乎可以通过其他方式实现......

为了自己弄清楚,我使用 AdventureWorks 数据库中的 Employee 和 EmployeePayHistory 表创建了一个非常简单的实体模型。

我在网上看到的一个示例演示了类似于以下 Entity SQL 的内容:

SELECT VALUE
    DEREF(CREATEREF(AdventureWorksEntities3.Employee, row(h.EmployeeID))).HireDate
FROM 
    AdventureWorksEntities3.EmployeePayHistory as h

这似乎撤回了 HireDate 而无需指定加入?

为什么这比下面的 SQL 更好(看起来完全一样)?

SELECT VALUE
    h.Employee.HireDate
FROM 
    AdventureWorksEntities3.EmployeePayHistory as h

查看以上两个语句,我无法弄清楚 CREATEREF、DEREF 位添加了哪些额外内容,因为没有它们我似乎能够得到我想要的东西。

我假设我只是没有找到证明目的的场景。我假设在某些情况下使用这些关键字要么更简单,要么是完成所需结果的唯一方法。

我找不到的是场景....

任何人都可以填补空白吗?我不需要整套 SQL。我只需要一个起点,即一个或两个场景的简要描述......我可以自己扩展。

4

2 回答 2

1

TL;DR - REF/DEREF 类似于 C++ 指针。它们是对持久实体(不是尚未保存到数据源的实体)的引用。

为什么要使用这样的东西?:对实体的引用比使用 DEFEF(或扩展;或填充;或实例化)实体使用的内存更少。如果您有一堆包含图像信息和图像数据的记录(4GB 文件存储在数据库中),这可能会派上用场。如果您不使用 REF,而您拉回 10 个这些实体只是为了获取图像元数据,那么您很快就会填满您的记忆。

我知道我知道。只在查询中拉回元数据会更容易,但是这样你就失去了 REF 的好处:-D

于 2012-08-11T00:01:07.760 回答
1

看看这个帖子

引用的好处之一是它可以被认为是一个“轻量级”实体,在它真正需要之前,我们不需要花费资源来创建和维护完整的实体状态/值。一旦你有一个实体的引用,你可以通过使用 DEREF 表达式或调用实体的属性来取消引用它

于 2012-07-30T08:48:58.287 回答