问题标签 [entity-framework-core-2.1]
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.
c# - 如何更新 SaveContext 上修改和删除的实体?
目标是跟踪谁更改和删除了实体。
所以我有一个实现接口的实体:
现在实体删除操作的代码可能如下所示:
实际上:ModifiedBy
永远不会执行更新(当我的数据库历史触发器期望“处理”它时)。只有删除语句才会在 DB 上执行。
如果实体被修改,我想知道如何强制 EF Core“更新”已删除的实体/条目(实现特定接口)。
注意: RowVersion
增加了额外的复杂性。
PS 手动进行额外的 SaveContext 调用 - 当然是一种选择,但我想要一个通用的解决方案:许多不同的更新和删除,然后一个 SaveContext 进行所有分析。
在 SaveContext 收集之前手动更新这些属性var deletedEntries = entries.Where(e => e.State == EntityState.Deleted && isAuditable(e))
不是一种选择,因为它会破坏 EF Core 锁顺序管理,从而引发死锁。
EF CORE
最明确的解决方案是只保留一个 SaveContext 调用,但在call之前在可审计字段上注入 UPDATE 语句DELETE
。如何做到这一点?可能有人已经有了解决方案?
替代方案可能是“在删除时不编写 DELETE 语句,但调用可以接受可审计字段作为参数的存储过程”
c# - 无法添加实体类型“X”的种子实体,因为没有为所需属性“..ID”提供值
我正在玩EF Core 2.1 Preview 2。我在使用 HasData (Seed) 方法时遇到问题OnModelCreating(ModelBuilder modelBuilder)
我的模型是没有注释的简单 POCO 类。
在我的DbContext
内部OnModelCreating
方法中,数据库模型定义为
种子方法定义为:
在启动期间,运行 ctx.Database.Migrate() 时出现异常:无法添加实体类型“租户”的种子实体,因为没有为所需的属性“租户 ID”提供值
c# - EF Core Group By 对条件总和的翻译支持
听到 EF Core 2.1 将支持翻译组,我真的很兴奋。我下载了预览版并开始对其进行测试,但发现在许多地方我仍然没有按翻译分组。
在下面的代码片段中,对 TotalFlagCases 的查询将阻止按翻译进行分组。无论如何,我可以重写它以便我可以按支持分组吗?或者也许我可以采取另一种方法?
此表中有很多行,我不希望 .NET 必须加载所有这些行。我也使用行级数据,但一次只有大约 15 条记录。
c# - 使用外键创建索引
我正在使用 ef core 2.1 preview 2。我需要在 mssql 数据库中的涉及外键的表上创建复合索引。以下是我所追求的语义,但语法无效:
我怎样才能做到这一点?
c# - 针对计算值的索引或约束的最佳方法
我正在使用 ef-core 2.1 rc1,我的模型类似于:
生成的架构包含ParentId
关联表上的 FK int 列。
我有一个跨Resource
、和的唯一索引Role
,但是我现在需要强制执行一个新案例,以便对于相似和值的每个分组,每个.Category
ParentId
Resource
Role
Category
ParentId
这不同于简单的唯一约束,它允许重复的Resource
,Role
和仅ParentId
变化Category
。
我查看了计算列,我认为如果持久化可以用于跨和生成唯一索引Resource+Role
,但我无法创建这种场景,因为 EF 抱怨无法跨计算列创建索引。Category
ParentId
例如,尝试使用以下数据插入两行会根据现有索引产生约束违规:
这满足了原始数据完整性需求,但是现在以下数据也必须引发约束违规:
如何在不修改模型和引入属性的情况下仅在数据库级别实现这一点?
mysql - Microsoft.EntityFrameworkCore 2.1-rc 与 MySql.Data.EntityFrameworkCore
我正在尝试将 mysql 与 Microsoft.EntityFrameworkCore 2.1-rc-final 和 MySql.Data.EntityFrameworkCore 8.0.11 作为提供者一起使用。但是当我尝试执行 mugrations 命令时,我得到了这个异常: System.MissingMethodException: Method not found: 'Void Microsoft.EntityFrameworkCore.Storage.Internal.RelationalCommandBuilderFactory..ctor(Microsoft.EntityFrameworkCore.Diagnostics.IDiagnosticsLogger`1, Microsoft .EntityFrameworkCore.Storage.IRelationalTypeMapper)'。
这是我的 IDesignTimeDbContextFactory 代码实现:
请问我该如何解决这个问题或至少一些如何与其他提供商一起使用的示例
c# - Entity Framework Core:无法使用嵌套值对象更新实体
我有一个具有值对象的实体,并且该值对象具有另一个值对象。我的问题是,当更新实体和值对象时,具有父值对象的实体得到更新,但子值对象没有。注意,我使用了最新版本的 Entity Framework Core 2.1.0-rc1-final。
这是父实体Employee
:
这是父值对象Address
:
这是子值对象GeoLocation
:
在更新员工时,我首先从数据库中获取它,然后Address
使用从用户界面获得的新值更改属性。
和SetAddress
方法:
entity-framework - 何时使用拥有的实体类型而不是仅创建外键或将列直接添加到表中?
我在这里阅读有关拥有的实体类型的信息https://docs.microsoft.com/en-us/ef/core/modeling/owned-entities#feedback我想知道什么时候会使用它。特别是在使用时,.ToTable();
虽然我不确定 ToTable 是否与键建立关系。
我阅读了整篇文章,所以我明白它本质上是强迫您通过导航属性访问数据并防止拥有的表被视为实体。他们还说Include()
不需要,并且每次查询父表时数据都会下降,因此您不会减少返回的数据量。
那么究竟有什么意义呢?“表拆分”还有什么意义?
c# - EF 核心 2.1。向 MigrationHistory 表添加自定义列
我使用 EF Core 2.1 代码优先。
SELECT * FROM [dbo].[__MigrationsHistory]
从 2 列返回表
- 迁移 ID
- 产品版本
我正在寻找一种方法来添加一个多列AppliedOn
,该列将存储迁移真正应用于数据库的时间。