问题标签 [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.
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
函数如下所示:
asp.net-mvc - Fluent API 一对多映射表
如果有人可以向我解释如何使用 Fluent API 为一对多关系创建映射(关联)表,这真的很有帮助。`
映射表应包含 CategoryID 和 ImageID。解决方案应该与此类似。(这是多对多的)
我希望 Fluent API 为以下关系创建新的映射表。
c# - 如何使用包含 DayOfWeek 列的 fluent api 创建复合主键?
在我的模型中,我有一个详细信息表,其中包含一周中每一天的数据,因此它具有以下定义:
在 EF Fluent API 映射类中,我这样定义复合键:
但是Entity Framework生成的表结构只有主键的第一列:
这个问题是由第二列是 DayOfWeek 枚举引起的吗?我以前在复合键上使用过枚举,但从未出现过这个问题
c# - EF Fluent API 一对多关系。我应该在什么端定义它?
使用 Entity Framework Fluent API,可以在两个参与类上定义关系。我想知道这两种解决方案是否有优点或缺点。
让我演示一下。我有这些课程:
和配置:
如您所见,两种配置都包含相同的一对多关系。这显然是多余的。
相比之下,使用属性很清楚在这种情况下会发生什么:
我的问题是:
我应该在哪里定义关系?在群里?在动物身上?有什么区别吗?我应该在这里遵循一个明确的约定吗?
entity-framework - 实体框架与外键一对一
似乎实体框架有一些约定来处理一对一的关系。
我正在使用 Fluent API,我需要我的子实体拥有 PK 和 FK。
是否可以不使用 [ForeignKey] 属性?
c# - ASP Boilerplate (EF) - Fluent Api - 自引用表,不使用主键
所以我必须从另一个数据库中导入一个表。该表使用自己的密钥进行自引用,但我不能信任该密钥,特别是因为我要导入的表将用于多个数据集。
我正在使用实体框架和代码优先流利的 api,但有一段时间寻找解决此问题的方法。
这是我的 POCO 类(简化为仅需要的数据点):
如果我可以使用 Id,这将是一个简单的自引用表,但我必须使用 personid。我已经在这里设置了我需要的流畅 api 的想法,但 EF 一直在查看 Id。
使用 personid 作为唯一约束(尚未在 EF6.1.2 中实现)填充集合的任何解决方法?
我也在使用 Asp.NetBoilerplate,因此可以对我的实体、存储库等进行一些控制,但不推荐。即“Id”被假定为任何和所有表的主键。
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 类,但它最终还是删除了表。
c# - 在实体框架上为 NULL 值创建唯一过滤索引
我正在尝试使用实体框架创建一个具有 NULL 值的唯一过滤索引的表(例如,允许 Null 值重复)。
我正在使用 Fluent API 并具有此实体属性:
我发现 SQL Server 2008 允许对具有过滤空值的唯一列进行此操作:
这甚至可能吗?因为我使用的是 LocalDB。
entity-framework - 实体拆分为一张表
使用 EF 6.1.2。代码第一。我有这些模型:
我的存储目标是使用实体拆分,最终只有 2 个表:汽车和配件。因为Transmission实体和DriveTrain实体都没有主键,所以 EF6 会自动将这些表合并到我的主表汽车中进行存储。这是很好的默认行为,我喜欢它。我的问题是在解决引擎实体时出现的。请注意,它有一个在概念上与汽车主键不同的主键。已经使用了一些流畅的 API 配置,我还没有能够成功地将Engine实体合并到汽车中存储方面的实体。我发现这篇 MSDN 文章: http: //msdn.microsoft.com/en-us/data/JJ591617.aspx#2.8 但这个例子需要相同的共享主键。这两个实体有不同的主键。
在保持上述确切模式的同时实现我的目标的最佳方法是什么?
entity-framework - 如何 POST/PATCH 到 Azure 移动服务上的多对多关系实体?
我一直在关注Windows 开发中心的现场工程师示例项目,以指导在我的模型上映射多对多关系。困扰我的是如何将条目插入到多对多关系中。
以我的模型为例:
一个组织可以有很多用户。
一个用户可以属于许多组织。
我的User模型类如下所示:
我的UserDTO类是这样的:
我的组织类:
我的组织 DTO课程:
考虑到这些类,我创建了控制器类,我使用AutoMapper映射了 DTO 和 Model 类,如下所示:
使用Fluent API ,我使用EntityTypeConfiguration类定义了这两个实体之间的关系,如下所示:
我创建了一个TableController类来处理UserDTO和OrganizationDTO ,插入新用户或新组织没有问题,但是据我所知,每个TableController类的端点只允许我单独添加用户或组织。
要在OrganizationsUser表中创建一个条目,我该如何实现?
我在想PATCH请求应该是一种方法,但它是正确的方法吗?我必须为此定义一个 TableController 吗?如何公开此关系中元素的插入、更新、选择和删除?要发送到端点的 JSON 是什么?
编辑 1
我试图在这样的组织中修补用户属性:
网址:serviceUrl/tables/Organization/1
JSON 正文:
但这给了我一个错误:
主键值之一的类型与实体中定义的类型不匹配。有关详细信息,请参阅内部异常。参数名称:keyValues
内部异常:
参数类型 'Edm.Int32' 和 'Edm.String' 与此操作不兼容。在 WHERE 谓词附近,第 1 行,第 78 列。
如果我没记错的话,似乎我需要将要发送的字符串映射到使用 Fluent API 创建的连接表中,但是如何映射使用 Fluent API 定义的连接表?PATCH 是这样做的方法吗?还是有其他方法?