问题标签 [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 回答
151 浏览

c# - 如何公开 Join 表?

我正在尝试遵循Jimmy Bogard关于避免 ORM 中的多对多映射的想法

鉴于此设置,我还希望能够直接公开关系中的“加入”对象。

对象

  • 用户
  • 角色
  • UserRole(关联对象)

代码:

如果我为此添加迁移,我会得到我所期望的。

只要我将一个 DBset 添加到 UserRoles 对象的 DbContext 中。EF 找不到 UserRoles 对象的 PK。

UserRoles:EntityType:EntitySet 'UserRoles' 基于没有定义键的类型'UserRole'。

然后我尝试像这样指定密钥:

但是 EF 不知道我想使用相同的 UserRoles 表,因为它为该对象添加了第二个表。

如何指示 DbModelBuilder 我只想使用单个 UserRole 表?

我在github上有一个针对这个问题的演示 .sln

0 投票
1 回答
1111 浏览

c# - 如何忽略映射中的嵌套枚举

为方便起见,我有几个带有嵌套枚举的参考实体。例如:

我在模型配置时遇到以下异常:“StatusA+Values”类型和“StatusB+Values”类型都具有相同的简单名称“Values”,因此不能在同一模型中使用。给定模型中的所有类型都必须具有唯一的简单名称。在 Code First fluent API 中使用“NotMappedAttribute”或调用 Ignore 以从模型中显式排除属性或类型。

试图修复它我发现 NotMappedAttribute 不适用于枚举。我还尝试了 fluent API .Ignore<T>(也需要 ref 类型,而不是枚举)和.Ignore(IEnumerable<Type>),但没有运气。谷歌搜索也不是很有帮助。

有没有其他方法可以从模型中排除这些枚举?

0 投票
1 回答
9274 浏览

c# - Multiple indexes possible using HasColumnAnnotation?

It looks like in Entity Framework 6.1 they added the ability to create table indexes via the new HasColumnAnnotation method. I created a few helper extensions to speed up the process:

This works fantastic...until I try to create a second index that contains a column already used in another index. Whatever I add last overwrites the original. Does anyone know if it is currently possible to add multiple indexes to the same column via the new HasColumnAnnotation available on the StringPropertyConfiguration and PrimitivePropertyConfiguration?

I can work around this like I always have by manually adding indexes in the Migration scripts, but it would be most excellent to be able to configure this in the EntityTypeConfiguration mappings so I can have it all in one spot.


After Gerts feedback, this is what I ended up doing:

And here is the new usage:

0 投票
0 回答
98 浏览

c# - 包含导致 OutOfMemoryException

在使用带有代码优先方法的实体框架时,我遇到了一个非常奇怪的问题。我已禁用延迟加载,并在需要时使用包含语句。不幸的是,我无法向您展示代码,但会尽可能详细地解释。

我有两张表,一张是指另一张:

对应的类:

我可以自己加载 A 和 B 而不会出现问题,但是当我编写例如:加载 B 并最终调用 ToList() 时的 Include(p => pA) 时,它会在一段时间后导致 OutOfMemoryException。

桌子不是那么大。表 A 有大约 600 条记录,表 B 有 5 条记录。

A 类的映射如下所示:

B 类的映射如下所示:

我需要映射它们,因为列名和表名不符合约定。包含可以毫无问题地用于其他对象。

最奇怪的是,当我使用 Include() 时,数据库永远不会被命中。

有人有建议吗?因为我现在真的没有想法了。

0 投票
2 回答
1811 浏览

entity-framework - 如何使用 EF 6.1 fluent API 创建空间索引

嗯,这个问题已经很清楚了。是否可以使用 Entity Framework 6.1 fluent API创建空间索引?

0 投票
1 回答
30 浏览

c# - 如何配置与FK的一对一可选关系

由于我们架构的限制,Id属性不能更改!

我有一个员工班:

和一个用户类(System User)

Matricula类中的属性应该是指向具有该属性User的类的 FK 。 EmployeeMatricula

类中的Employee属性User表示与相同的 Employee 对象Matricula

如何通过 EF 中的 Fluent API 进行设置?

目标是,如果Matriculainemployee 与 user 中的属性相同Matricula,则它们必须关联,并且Employee类将填充该类中的该员工User

0 投票
1 回答
248 浏览

entity-framework - 在 EF 6 Fluent API 中从 CRUD 读取地图

我一直在网上搜索,但没有找到任何有用的东西。我有一个 POCO 类,我想将它连接到 Entity Framework 6.x 中的存储过程。我已经看到如何在 Fluent API 中进行插入、更新和删除......但不仅仅是直接阅读。

我发现了这个:EF 6 Code First Stored Procedure - Read Only,但看起来它只是某个控制器上的一个方法。

有没有一种方法可以像调用任何其他实体一样调用上下文。即,ctx.Products.Where(p => p.ProductId == productId)?

0 投票
0 回答
119 浏览

c# - 将 C# 计算的列添加到表中?

我正在为预先存在的应用程序构建实体框架数据上下文。由于这个应用程序有一组非常干净的 POCO 来定义域模型,我选择使用 EF 的 Code First 从这些类生成数据库,这样我们就不必维护两个单独的模型;理论上,数据库将被迁移以匹配我们对 POCO 所做的任何事情,只是在OnModelCreating()覆盖中偶尔需要一些映射。

我的问题是其中一个域类具有Dictionary<string, object>用于存储状态数据的类型属性(正在从其他地方的键值存储中读取,所以我们坚持使用这种格式)。我的第一个想法是我们可以只应用[NotMapped]这个属性,然后创建一个string属性,其中 getter 和 setter 只是将其序列化/反序列化为DictionaryXML、JSON 或其他。

问题是我们没有用特定于数据库的东西来改变域类,所以我必须从数据访问程序集中完成所有这些工作。我知道如何NotMapped在 Fluent Configuration API 中应用该属性,但我不知道如何为序列化参数设置列。在模型上,它看起来像这样:

我将如何在 Fluent Configuration API 中编写等效代码?甚至可能吗?

0 投票
1 回答
844 浏览

c# - 首先将 sql 视图映射到已在 Entity Framework Code 中定义的多个实体?

我正在使用代码优先方法流式 API 将 sql 表映射到实体,如下所示:

映射器被定义为:

和用户映射器:

这东西很好用。现在我们必须改变逻辑来获取信息。现在公司决定使用sql视图来获取完整的用户信息,这样您就可以在一个地方获取用户的所有信息。现在我不想重做/创建另一个映射器来映射来自 sql 视图的两个表的所有字段。

所以我的问题是我们可以声明另一个映射器,它将这两个映射器映射为:

请建议。谢谢

0 投票
2 回答
2444 浏览

c# - 实体框架 - 在种子方法中将现有实体添加到一对一关系

我的领域课程:

使用 Fluent API 进行映射:

种子方法:

错误:

似乎是当我尝试添加一个新的“站点”时,新的“地址”也会被插入。如何避免这种情况?如何在我之前添加的 DBcontext 中插入现有的“地址”。我是 Entity Framework 的新手,非常感谢您的帮助。提前致谢!