问题标签 [entity-framework-plus]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
entity-framework - 不能将过滤器与动态 linq 一起使用
我尝试使用 ef plus 通过以下代码过滤数据
并出现错误。难道我做错了什么?
entity-framework - 澄清 EF Plus 究竟缓存了什么
如果我有一个服务请求表并在其上运行以下代码:
这与保存此查询是否相同:
SELECT * FROM ServiceRequests WHERE ID = 12345
还是和说的一样:
SELECT * FROM ServicesRequests(然后从新缓存的数据中找到 id 12345)。
换句话说,关于使用上面的代码行,究竟缓存了什么?如果我稍后返回一个新 ID,那么它会查询缓存还是转到数据库,因为它第一次只保存了第一个 ID 的记录?
entity-framework-6 - 具有自动 CRUD 日志记录的数据库优先方法
我已按如下方式设置 EF+ 审计:
我使用部分类来避开 EF6 生成的文本模板化原始上下文。我使用以下 SQL 脚本按原样生成这两个表:
我在静态构造函数中遇到错误:
错误AuditEntries.AddRange(audit.Entries)
:CS1503 参数 1:无法转换System.Collections.Generic.List<Z.EntityFramework.Plus.AuditEntry>
为System.Collections.Generic.IEnumerable<DA.Systems.Focus.Data.EntityFramework.FocusOrm.AuditEntry>
我错过了什么吗?
c# - Entity Framework Plus 动态过滤中断查找方法
我需要根据用户的权限动态过滤特定表中的数据。例如,“普通”用户只能看到分配给他的记录,但管理员可以看到全部。我正在使用 ninject 为每个请求创建数据库上下文,并通过将其他用户信息传递给构造函数来创建上下文。然后我从 EntityFramework-Plus 扩展应用动态过滤(EF6):
该解决方案按预期工作,即调用如下方法:
导致过滤器中声明的额外连接。
但是当我使用方法 Find() 时行为很奇怪。我正在使用 SqlServer 探查器来查看幕后发生的事情:
- 我将上下文创建为受限(非管理员用户) - 调用 Find() 将导致额外的 WHERE 语句对应于过滤器的 lambda 表达式
- 然后我以管理员身份创建上下文(单独的请求)——调用 Find() 将产生相同的 SQL 表达式(我希望没有额外的 SQL 子句)。
AFAIK 这与查询缓存有关,因为向构造函数添加额外的行似乎可以解决问题:
这看起来像是一个很大的矫枉过正,它并没有让我更接近于理解这个问题。所以这是我的问题:
- 为什么这个问题不影响 Where() 而是影响 Find()?
- 有没有更清洁的方法来解决这个问题?我已经阅读了有关动态过滤器库的信息,但这对我没有好处,因为它仅适用于代码优先模型(此处为 DB 优先)。
- 是否有更好的基于每个请求数据过滤数据的概念(例如我的示例中的 userId)?
更新
这就是我的 lambda 表达式的样子:
AspNetGroups 是我用于对用户进行分组的自定义表。数据权限分配给用户组。
asp.net-core - 为什么我的实体主键在更新实体后显示被修改?
我有一个ApplicationUser
继承自IdentityUser
. 我添加了数据类型属性LastLoggedIn
,OffsetDateTime
并在每次对 API 的请求时对其进行修改。另外,我使用Audit
from entityframework plus 来记录用户添加/更新/删除操作,这就是我遇到这个问题的方式。每次更新ApplicationUser
实体的LastLoggedIn
属性时,我都可以看到该Id
属性也已被修改,显示相同的旧值和新值。为什么我的主键在这里被修改?
我发布了相关代码,
调用实体的方法,因为类继承自IdentityUser
,我正在使用UserManager
我尝试了以下但我得到一个例外,
无法将属性“Id”配置为“ValueGeneratedOnUpdate”或“ValueGeneratedOnAddOrUpdate”,因为在将实体添加到商店后无法更改键值。
c# - 使用 entityframework-plus 扩展缓存查询
我想使用entityframework-plus扩展来缓存我的一些查询,但是它没有任何选项来选择特定项目并缓存它们,当我阅读它的文档时,它会缓存所有列,如下所示:
但我有这样的事情:
我只想选择tbl_ProductID IDs 不选择 *
有人使用此扩展程序吗?有什么选择吗?甚至还有其他可以缓存我的查询的扩展吗?
c# - 如何组合多个 c# Lambda 表达式(表达式>)
我有以下函数,它实际上是 Z.EntityFramework.Plus 批量更新的包装器:
像这样调用:
其中 IBaseEntity 定义如下:
顺便说一下,“问题”类实现了 IBaseEntity。
我想要做的是自动将 ModifiedBy 和 ModifiedDate 附加到 UpdateBulk 函数中的 updateFactory,这样就不必在每次调用 UpdateBulk 时都这样做。
我尝试在上面的 UpdateBulk 函数中将解析的“updateFactory”表达式与“modifiedExpression”结合起来,但它返回错误:
没有为类型“问题”定义二元运算符 AndAlso
是否可以像这样合并表达式,如果可以,我做错了什么?如果没有,我如何将 ModifiedBy = "Test", ModifiedDate = DateTime.Now 合并到 updateFactory 表达式中?
谢谢, 罗德
c# - 我可以为每个会话使用单独的查询计划缓存吗?
我有一个多租户 ASP.NET 应用程序,我们的数据库设置了软删除。最初,我们直接在查询级别处理数据限制,例如:
可以想象,这会使我们的数据访问层中的所有查询膨胀,如果忘记添加正确的过滤条件,这会使 API 非常容易受到攻击。我们决定将全局过滤应用于上下文Z.EntityFramework.Plus.EF6
:
这非常适合单个用户。但是,当您切换租户时,我们会遇到将过滤器表达式保存在查询计划缓存中的问题。这是 Entity Framework Plus 的一个已知问题,由于它似乎没有得到解决,我需要找到一种解决方法。
我能想到的最直接的解决方案是将查询计划缓存的生命周期与当前会话相关联,当用户注销或切换租户时,缓存被销毁。这是可能的,如果是这样,我怎样才能做到这一点?
entity-framework - Entity Framework Z Plus 批量更新
我正在使用 Entity Framework Z Plus 批量更新方法。由于以下问题,我无法继续。实际上,当我给出静态值时,Update 方法效果很好tagName="amir1"
。但是我需要Tagdescription
从 Web 服务或基于的另一个集合中获取tagId
,更新方法不接受扩展方法或任何其他方法来完成我的要求。它的说法
“LINQ to Entities 无法识别方法 'System.String GetTagDescription(Int32)' 方法,并且此方法无法转换为存储表达式。”。
希望我的要求现在很清楚。如果有任何其他方法可以满足我的要求,请指导我。
这是我的代码:
entity-framework - Entity Framework Plus 清除单个查询的缓存
每当我需要从 SQL 数据库中检索数据时,我都会使用 FromCache() 方法。由于它是基于 userID 获取数据,因此在单个方法中将执行许多唯一查询。与 userID 关联的数据将通过一个单独的过程进行更新,该过程还将在控制检索的方法中触发一个事件。当特定用户的数据更新时,我想使该用户的缓存过期,以便对该用户 ID 的下一个查询将获得最新数据。
我看到 EF plus 可以选择 ExpireTag。为每个用户 ID 创建一个标签然后使用它来使缓存过期是否可行?