问题标签 [ef-fluent-api]

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 回答
801 浏览

c# - 实体框架 6 - 一对一关系

我对 EF 还很陌生,并且使用的是版本 6,并且陷入了一对一的关系。我的整体结构是我有一个 Gallery 对象,其中有一个 GalleryMediaItem 实体的 ICollection,每个 GalleryMediaItem 都有一个与之关联的 MediaItem 实体。请注意,GalleryMediaItem 实体要求基础 MediaItem 具有值,尽管 MediaItem 实体本身不知道 GalleryMediaItem,这是有意的,因为 MediaItem 实体可能与 GalleryMediaItem 之外的其他事物相关联。这是一个例子:

我要做的是在我访问实例的MediaItem属性时让延迟加载为 MediaItem 实体工作GalleryMediaItem。我的数据库结构与上面的代码结构匹配(GalleryMediaItem 有 GalleryId 和 MediaItemId,但 MediaItem 没有 GalleryMediaItemId,也不应该)并且返回的对象始终为 null。奇怪的是MediaItemId,我的GalleryMediaItem实例上的属性已正确填充,但导航属性本身不起作用。我已经尝试了以下所有变体,但没有运气:

等等。我尝试过的每个变体都没有出现任何错误,只是没有导航属性访问。

配置这个的正确方法是什么?哪里GalleryMediaItem可以填写MediaItem子实体,但MediaItem它本身(通过 POCO 和数据库)不知道父所有者?

编辑

其中一条评论要求我展示用于检索单个项目的代码。我有一个通用框架位于我的 DbContext 实例之上,但在它下面是获取单个Gallery实体的方法:

上面的BaseEntity泛型只是一个超级基本的 POCO,上面有 Id、CreateDate、MaintDate 等内容。我的 POCO 类中没有一个使用属性来表示它们对应的 DB 值,一切都是通过流体 EF API 完成的。Gallery直接继承BaseEntity,所以这个泛型函数符合预期。

DataUtilities.BuildOrExpressionTree函数如下所示:

0 投票
1 回答
354 浏览

asp.net-mvc - Fluent API 一对多映射表

如果有人可以向我解释如何使用 Fluent API 为一对多关系创建映射(关联)表,这真的很有帮助。`

映射表应包含 CategoryID 和 ImageID。解决方案应该与此类似。(这是多对多的)

我希望 Fluent API 为以下关系创建新的映射表。

0 投票
0 回答
2917 浏览

c# - 如何使用包含 DayOfWeek 列的 fluent api 创建复合主键?

在我的模型中,我有一个详细信息表,其中包含一周中每一天的数据,因此它具有以下定义:

在 EF Fluent API 映射类中,我这样定义复合键:

但是Entity Framework生成的表结构只有主键的第一列:

这个问题是由第二列是 DayOfWeek 枚举引起的吗?我以前在复合键上使用过枚举,但从未出现过这个问题

0 投票
1 回答
185 浏览

c# - EF Fluent API 一对多关系。我应该在什么端定义它?

使用 Entity Framework Fluent API,可以在两个参与类上定义关系。我想知道这两种解决方案是否有优点或缺点。

让我演示一下。我有这些课程:

和配置:

如您所见,两种配置都包含相同的一对多关系。这显然是多余的。

相比之下,使用属性很清楚在这种情况下会发生什么:

我的问题是:

我应该在哪里定义关系?在群里?在动物身上?有什么区别吗?我应该在这里遵循一个明确的约定吗?

0 投票
1 回答
44 浏览

entity-framework - 实体框架与外键一对一

似乎实体框架有一些约定来处理一对一的关系。

我正在使用 Fluent API,我需要我的子实体拥有 PK 和 FK。

是否可以不使用 [ForeignKey] 属性?

0 投票
1 回答
464 浏览

c# - ASP Boilerplate (EF) - Fluent Api - 自引用表,不使用主键

所以我必须从另一个数据库中导入一个表。该表使用自己的密钥进行自引用,但我不能信任该密钥,特别是因为我要导入的表将用于多个数据集。

我正在使用实体框架和代码优先流利的 api,但有一段时间寻找解决此问题的方法。

这是我的 POCO 类(简化为仅需要的数据点):

如果我可以使用 Id,这将是一个简单的自引用表,但我必须使用 personid。我已经在这里设置了我需要的流畅 api 的想法,但 EF 一直在查看 Id。

使用 personid 作为唯一约束(尚未在 EF6.1.2 中实现)填充集合的任何解决方法?

我也在使用 Asp.NetBoilerplate,因此可以对我的实体、存储库等进行一些控制,但不推荐。即“Id”被假定为任何和所有表的主键。

0 投票
1 回答
2020 浏览

c# - 向现有的多对多关系添加附加列 - EF Code First

我正在使用实体框架 6.1.1。我需要在联结表中添加一个额外的字段,该联结表是使用 Fluent API 正确创建的。我知道这对于 Fluent API 是不可能的,并且我必须创建一个模型类,但问题是我无法设法将 fluent api 配置映射到实体模型类,而最终会删除联结表并重新创建它。

我有两个模型类:Docente 和 Lezione。

以及正确设置表“LezioneDocente”的配置类:

现在我有必要在这个表中添加一个额外的列(RuoloId),所以我需要将 fluent API 配置映射到一个模型类。我尝试通过添加一个新模型类并修改 Docente 和 Lezione 类来引用新模型“LezioniDocente”来做到这一点,如下所示:

当我添加新迁移以反映更改时,它不可避免地会在 LezioneDocente 表上调用 DropTable。

我错过了什么吗?如何在不删除现有表的情况下将流畅的 API 关系映射到模型类?我还尝试在不指定新列的情况下编写 LezioneDocente 类,但它最终还是删除了表。

0 投票
1 回答
2580 浏览

c# - 在实体框架上为 NULL 值创建唯一过滤索引

我正在尝试使用实体框架创建一个具有 NULL 值的唯一过滤索引的表(例如,允许 Null 值重复)。

我正在使用 Fluent API 并具有此实体属性:

我发现 SQL Server 2008 允许对具有过滤空值的唯一列进行此操作:

这甚至可能吗?因为我使用的是 LocalDB。

0 投票
0 回答
49 浏览

entity-framework - 实体拆分为一张表

使用 EF 6.1.2。代码第一。我有这些模型:

我的存储目标是使用实体拆分,最终只有 2 个表:汽车配件。因为Transmission实体和DriveTrain实体都没有主键,所以 EF6 会自动将这些表合并到我的主表汽车中进行存储。这是很好的默认行为,我喜欢它。我的问题是在解决引擎实体时出现的。请注意,它有一个在概念上与汽车主键不同的主键。已经使用了一些流畅的 API 配置,我还没有能够成功地将Engine实体合并到汽车中存储方面的实体。我发现这篇 MSDN 文章: http: //msdn.microsoft.com/en-us/data/JJ591617.aspx#2.8 但这个例子需要相同的共享主键。这两个实体有不同的主键。

在保持上述确切模式的同时实现我的目标的最佳方法是什么?

0 投票
1 回答
999 浏览

entity-framework - 如何 POST/PATCH 到 Azure 移动服务上的多对多关系实体?

我一直在关注Windows 开发中心的现场工程师示例项目,以指导在我的模型上映射多对多关系。困扰我的是如何将条目插入到多对多关系中。

以我的模型为例:

一个组织可以有很多用户

一个用户可以属于许多组织

我的User模型类如下所示:

我的UserDTO类是这样的:

我的组织类:

我的组织 DTO课程:

考虑到这些类,我创建了控制器类,我使用AutoMapper映射了 DTO 和 Model 类,如下所示:

使用Fluent API ,我使用EntityTypeConfiguration类定义了这两个实体之间的关系,如下所示:

我创建了一个TableController类来处理UserDTOOrganizationDTO ,插入新用户或新组织没有问题,但是据我所知,每个TableController类的端点只允许我单独添加用户组织。

要在OrganizationsUser表中创建一个条目,我该如何实现?

我在想PATCH请求应该是一种方法,但它是正确的方法吗?我必须为此定义一个 TableController 吗?如何公开此关系中元素的插入、更新、选择和删除?要发送到端点的 JSON 是什么?

编辑 1

我试图在这样的组织中修补用户属性:

网址:serviceUrl/tables/Organization/1

JSON 正文:

但这给了我一个错误:

主键值之一的类型与实体中定义的类型不匹配。有关详细信息,请参阅内部异常。参数名称:keyValues

内部异常:

参数类型 'Edm.Int32' 和 'Edm.String' 与此操作不兼容。在 WHERE 谓词附近,第 1 行,第 78 列。

如果我没记错的话,似乎我需要将要发送的字符串映射到使用 Fluent API 创建的连接表中,但是如何映射使用 Fluent API 定义的连接表?PATCH 是这样做的方法吗?还是有其他方法?