Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Entity framework 在什么情况下我需要使用CREATEREF、DEREF和REF关键字?_Entity Framework_Entity Sql - Fatal编程技术网

Entity framework 在什么情况下我需要使用CREATEREF、DEREF和REF关键字?

Entity framework 在什么情况下我需要使用CREATEREF、DEREF和REF关键字?,entity-framework,entity-sql,Entity Framework,Entity Sql,这个问题是关于为什么我会使用上面的关键字。我已经找到了很多MSDN页面来解释如何使用。我在寻找原因 我会尝试写什么样的查询来表示我需要它们?我这样问是因为我发现的例子似乎可以通过其他方式实现 为了尝试自己解决这个问题,我使用AdventureWorks数据库中的Employee和EmployeePayHistory表创建了一个非常简单的实体模型 我在网上看到的一个示例演示了类似于以下实体SQL的内容: SELECT VALUE DEREF(CREATEREF(AdventureWorks

这个问题是关于为什么我会使用上面的关键字。我已经找到了很多MSDN页面来解释如何使用。我在寻找原因

我会尝试写什么样的查询来表示我需要它们?我这样问是因为我发现的例子似乎可以通过其他方式实现

为了尝试自己解决这个问题,我使用AdventureWorks数据库中的Employee和EmployeePayHistory表创建了一个非常简单的实体模型

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

SELECT VALUE
    DEREF(CREATEREF(AdventureWorksEntities3.Employee, row(h.EmployeeID))).HireDate
FROM 
    AdventureWorksEntities3.EmployeePayHistory as h
这似乎可以在不指定联接的情况下拉回HireDate

为什么这比下面的SQL(看起来做的事情完全一样)要好

看看上面的两条语句,我无法计算CREATEREF,DEREF位增加了多少额外的内容,因为我似乎能够在没有它们的情况下得到我想要的东西

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

我找不到的是场景

有人能填补这个空缺吗?我不需要整套SQL。我只需要一个出发点,即一个或两个场景的简要描述。。。我可以自己详细说明。

看看这个

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


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

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

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

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