我在微风中未映射的属性似乎不适用于投影

2024-02-07

我有以下实体:

public class Invoice
{
    [Key]
    public int Id { get; set; }
    public DateTime? ArchiveDate { get; set; }
    public DateTime? ClotureDate { get; set; }
    ...
}

我想知道我的发票是否已存档或使用某种标志(布尔值)关闭。为此,我在微风实体中添加了 2 个未映射的属性,如下所示:

public class Invoice
{
    [Key]
    public int Id { get; set; }
    public DateTime? ArchiveDate { get; set; }
    public DateTime? ClotureDate { get; set; }
    [NotMapped]
    public bool Archived { get { return ArchiveDate.HasValue; } } 
    [NotMapped]
    public bool Clotured { get { return ClotureDate.HasValue; } } 
    ...
}

现在我可以像这样查询我的微风实体:

var query = entityQuery.from("Invoices")
                       .where('id', '==', id)
                       .toType('Invoice');

上面的调用将返回我的发票实体的所有属性(包括存档和关闭)。效果很好。

但我只需要一些特定的属性(为了性能)。然后我尝试:

var query = entityQuery.from("Invoices")
                       .where('id', '==', id)
                       .select("id, archived, clotured")
                       .toType('Invoice');

我收到错误:LINQ to Entities 不支持指定的类型成员“Archived”。仅支持初始值设定项、实体成员和实体导航属性。

非常令人沮丧。知道为什么我不能执行这样的查询吗?

或者也许有人有其他解决方案?

非常感谢。


简洁版本

您所看到的完全符合您的预期。这ArchivedDate既是持久数据属性又是序列化属性。这Archived属性不会被持久化,但会被序列化。这就是为什么你see两者的数据值ArchivedDate and Archived。然而,你的远程查询...在服务器上执行的 LINQ 查询...可能仅引用持久化属性,例如ArchivedDate。 EF 对计算属性一无所知,例如Archived;他们不能参与 LINQ 查询...不能参与where, select, orderBy或任何其他查询。您不能在查询中提及 EF 不知道的内容...并且您告诉 EF(正确地)忽略这些内容Archived and Clotured计算的属性。

长版

[Unmapped] 属性对 EF 隐藏属性...因为它必须Archived and Clotured是计算属性,而不是持久数据。

[Unmapped] 属性还对 EF 生成的元数据隐藏这些属性。这也是意料之中的,也是好事。

但这也意味着您无法构造引用这些属性的 LINQ 查询。它们不是数据属性。 EF 无法查询它们。只有数据属性和导航属性可以出现在 LINQ 查询中。真的就是这么简单。

也许您想知道为什么未映射的计算属性值实际上会传递到 JavaScript 客户端,为什么这些值出现在 JSON 有效负载中,并且如果您将此类属性添加到客户端元数据,则会填充类似名称的 Breeze 实体属性Invoice作为“未映射的属性”。

要了解原因,您必须了解使用 EF 查询的属性与使用 Json.NET 序列化的属性之间的区别。 EF 查询完成后,物化实体同时具有数据属性(例如 ArchivedDate)和计算属性(Archived)。 [NotMapped] 属性不会隐藏 Json.NET 中的属性。 Json.NET 序列化物化对象的所有属性 - 包括数据和计算属性 - 除非你告诉它不要这样做。例如,您可以使用 [Ignore] 属性从 Json.NET 序列化中隐藏 Archived 属性。

The toType是转移注意力,与此事无关。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我在微风中未映射的属性似乎不适用于投影 的相关文章

随机推荐

  • 无法打开本地文件 - Chrome:不允许加载本地资源

    测试浏览器 Chrome 版本 52 0 2743 116 这是一个简单的 JavaScript 用于从本地打开图像文件 如 C 002 jpg function run var URL file C 002 jpg window open
  • JasperReports API 中的 FileResolver 被什么替代?

    我们的一个软件实用程序使用一个类来实现net sf jasperreports engine util FileResolver加载驻留在与报表相关的路径或要通过专有文件服务器协议加载的报表元素 例如图像 从最新版本 6 6 0 开始 我看
  • Android NDK 未定义引用

    我正在尝试实现代码 here https github com webjb myrobot 当尝试编译它时 我收到以下错误 Error 339 undefined reference to ANativeWindow fromSurface
  • 单向一对多关系的 NHibernate 配置

    我正在尝试建立如下关系 每个Master项目有一个或多个Detail items public class Detail public virtual Guid DetailId get set public virtual string
  • .net core如何将内容范围添加到标题

    我没有找到如何将 Content Range 添加到我的 odata 请求的标头中 我的 api 需要这样的格式来进行分页 Content Range posts 0 24 319 我能找到的最接近的是 HTTP 字节范围支持 从这里 ht
  • 如何使用 htaccess 仅在某些页面上启用 https?

    我有一个电子商务网站 我想仅在位于以下位置的网站的电子商务部分启用 https https mysite com buy https mysite com buy 由于我的页面上的所有链接都是相对的 当有人访问时http mysite co
  • python组合26个不同时间戳和相同列的数据帧

    美国的一个数据库接收来自世界各地的一日信息 csv格式 有15天的数据 来自26个地方 总共 15x26 390 个数据帧 此外 还有26个地方有共同的参考数据框 现在 我想将 390 1 个参考数据帧合并为一个 我在这里给出了我的问题的示
  • 如何返回列表切片的最大元素

    我想最大限度地简化这个功能 我该怎么办 def eleMax items start 0 end None if end is None end len items return max items start end 我想到了 def e
  • 是否可以从mysql中的别名中进行选择?

    我创建了一个名为的表别名tbl 我想从中选择 但我无法做到这一点 我知道我的代码不正确也不优化 但我只是测试 MySQLCASE select case when exists select username from tbl then U
  • 非聚集索引中的行定位器

    我正在读关于Non Clustered Index其中说 Nonclusteredindex 仅包含指向实际数据行的索引列和行定位器中的值 而不包含数据行本身 这意味着查询引擎必须采取额外的步骤才能找到实际数据 Query 我不清楚Row
  • iOS:同步相机帧和运动数据

    我正在尝试从相机捕获帧和相关的运动数据 为了同步 我使用时间戳 视频和动作被写入文件然后进行处理 在这个过程中 我可以计算每个视频的运动帧偏移 事实证明 相同时间戳的运动数据和视频数据彼此偏移不同的时间 从 0 2 秒到 0 3 秒不等 该
  • 事件驱动编程是如何实现的?

    我正在研究twisted 和node js 框架是如何工作的 我是 试图准确理解操作系统如何支持 I O 使用回调的操作 我知道这很好 因为我们需要更少的线程 因为我们不需要 需要阻塞线程等待 I O 操作 但有些东西 I O 完成后必须调
  • 计算数字数组的可能排列

    我有一个带有数字 0 1 2 3 的 NSArray 计算 4 的阶乘 数组的计数 我有 24 种可能的排列 0 1 2 3 我想知道是否有一种方法可以计算所有这些可能的排列并将它们放在一个单独的数组中 例如 给定上面的数字 0 1 2 3
  • 在 C# 中将对象转换为 int 会引发 InvalidCastException

    我有这个方法 private static Dossier PrepareDossier List
  • DynamoDB:条件写入与 CAP 定理

    使用 DynamoDB 两个独立的客户端尝试同时写入同一个项目 使用条件写入 并尝试更改条件引用的值 显然 这些写入之一注定会因条件检查而失败 没关系 假设在写入操作期间发生了一些不好的事情 并且某些 DynamoDB 节点出现故障或彼此失
  • Python:使用单词交集而不是字符交集的杰卡德距离

    我没有意识到 Python set 函数实际上将字符串分隔成单个字符 我为Jaccard编写了python函数并使用了python交集方法 我将两个集合传递到此方法中 在将这两个集合传递到我的 jaccard 函数之前 我在设置环上使用 s
  • MVVM 和导航服务

    实现任何模式的众多好处之一是在应用程序的不同层之间分离关注点 对于 Silverlight 和 MVVM 我认为 NavigationService 属于 UI 如果 NavigationService 属于 UI 那么它应该在后面的 XA
  • Ruby 数组 concat 与 + 速度?

    我对 Ruby 数组进行了小型性能测试concat vs 操作和concat 太快了 然而我不清楚为什么concat 有那么快吗 有人可以帮忙吗 这是我使用的代码 t Time now ar for i in 1 10000 ar ar 4
  • 如何将场景缩放至全屏?

    我目前正在学习 Phaser 3 但是 我能找到的所有文档都是关于 Phaser2 的 创建游戏时 您必须在配置中设置宽度和高度 var config type Phaser AUTO width 800 height 600 如何将场景缩
  • 我在微风中未映射的属性似乎不适用于投影

    我有以下实体 public class Invoice Key public int Id get set public DateTime ArchiveDate get set public DateTime ClotureDate ge