问题标签 [ef-core-2.2]

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.

0 投票
1 回答
178 浏览

c# - EF Core:在同一张表之间定义 1 对 1 和 1 对多

我有两张桌子,为了争论,我们称它们为Profileand Session。AProfile有一个当前活动的会话(可选),并且所有会话都必须链接到一个配置文件(即使是那些不活动的)。

表定义

所以我们所拥有的是和之间的一对一关系,Session以及和之间的一对多关系。ProfileCurrentSessionIdProfileSession

问题是如何在 Entity Framework 代码优先中构建它?

我有我的两个实体

和两种类型的配置

所有这些都使用正确的列和外键生成预期的数据库模式。当我尝试将配置文件插入数据库时​​出现问题

在这一点上我得到一个SqlException说法

INSERT 语句与 FOREIGN KEY 约束“FK_Profile_CurrentSession”冲突

在探查器中查看插入不包括Profile记录,它只是试图插入Session

我正在尝试做的事情可能吗?是否应该以另一种方式定义?

  • EF 核心版本:2.2.1
  • 数据库提供程序:Microsoft.EntityFrameworkCore.SqlServer
  • 操作系统:Windows 10
0 投票
1 回答
269 浏览

c# - automapper 发布“ForMember”属性

我是 automapper 的新手,但导航属性映射有问题。我创建了这样的地图:

它制作了一个扁平物体,并且工作正常。但是当我从我的编辑表单回发 ObjEntityViewModel 时,属性“LabelName”始终为空。从我的 html 表单回发时,使用 ForMember 定义的所有属性似乎始终为空。我不明白为什么它为空,我该如何解决这个问题。

我的控制器代码:

我的html代码:

谢谢

我使用 EF 核心 2.2 和 automapper 6.0.0

0 投票
6 回答
11306 浏览

c# - 使用托管标识与 Azure SQL 的 EF Core 连接

我正在使用 EF Core 连接到部署到 Azure 应用服务的 Azure SQL 数据库。我正在使用访问令牌(通过托管身份获得)连接到 Azure SQL 数据库。

这是我的做法:

启动.cs:

MyCustomDBContext.cs

AzureSqlAuthTokenService.cs

这工作正常,我可以从数据库中获取数据。但我不确定这是否是正确的方法。

我的问题:

  1. 这是正确的方法还是会出现性能问题?
  2. 我需要担心令牌过期吗?我现在没有缓存令牌。
  3. EF Core 有没有更好的方法来处理这个问题?
0 投票
1 回答
894 浏览

c# - 多个同名内存数据库

关于这个答案,我试图通过设置UseInMemoryDatabase为相同的名称来使多个上下文工作。下面的测试失败,第二个上下文为空。

我还需要做什么才能在内存数据库中共享相同的内容?

0 投票
0 回答
639 浏览

entity-framework - Ef Core 2.2 和强类型 ID 属性上的外键

我想one-to-many在两个实体之间建立关系。假设非常简单,我想在Blog对象上收集帖子,并Post带有博客的 id。

配置:

不幸的是,它不适用于强类型的 Id 对象。在这种情况下,我们得到一个异常:

从具有外键属性 {'BlogId' : BlogId} 的 'Post' 到 'Blog.Posts' 的关系不能以主键 {'Id' : int} 为目标,因为它不兼容。为此关系配置一个主键或一组兼容的外键属性。

我尝试使用隐式运算符、IComparable 接口、拥有的类型来解决它,但这些解决方案都不能在这里工作。作为关系创建过程的一部分,它只是忽略了 BlogId 类型的转换 ( builder.Property(p => p.BlogId).HasConversion(v => v.Id, v => new BlogId(v));)。

您知道这种情况的任何解决方法或标准解决方案吗?由于持久层的限制,我不想在域中进行更改。

0 投票
1 回答
1705 浏览

c# - 在单元测试中强制 DbContext 在 SaveChanges() 上抛出异常

我正在使用带有InMemoryDatabase测试功能的 EF Core 2.2.0。有没有办法让它在调用操作时抛出异常,例如SaveChangesor Find

我想验证我的业务逻辑是否以特定方式处理异常。我知道我可以将DbContext所有内容抽象在一起,但是使用 EF Core 和InMemoryDatabase我希望直接访问 DbContext 而无需任何抽象。

在我的单元测试中,我目前正在创建DbContext这样的:

我的逻辑(非常简化):

0 投票
0 回答
270 浏览

asp.net-core - 与 DbQuery 的关系

我有这个参与者模型DbSet<Participants>

而这个 ParticipantDataView DbQuery<ParticipantsDataView>

数据库上下文:

我的查询:

错误:

ParticipantDataView 中的每个项目在 Participants 中都有一个匹配项,所以我不知道为什么会出现此错误?

0 投票
1 回答
553 浏览

c# - efcore 2.2 在使用 LazyLoadedProxies 时关闭特定查询的代理创建

我有一个应用程序,在大多数地方我希望能够使用 LazyLoadedProxies,所以我在 OnConfiguring 中调用 UseLazyLoadingProxies。

有一些我不想要代理的特定查询,因为我要序列化对象和其他可能被传递到应用程序的另一部分的查询,并且我不想要任何 N+1 错误,所以要确保我是没有得到代理。

如何为特定查询禁用代理。

0 投票
1 回答
10549 浏览

c# - EF Core 修改实体状态的行为如何?

我们将实体状态 = 修改后或修改前是否重要?

0 投票
2 回答
72 浏览

c# - 更新值对象或在数据库中插入新记录

我有一个 Ticket 表和它的 Receivers,它是一个集合。接收者是一个值对象。

我在 EF Core 2.2 中定义了所有内容,一切正常。

插入新票时,接收者被添加到票中并被保存。

对于更新票证,由于值对象是不可变的,我应该更新接收器表还是插入新的接收器?

我的意思是这样:只需更新已更改的属性

或者这样:插入带有新 ID 的新行