问题标签 [entity-framework-4.3.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.

0 投票
1 回答
778 浏览

c# - 实体框架 - 延迟加载失败但急切加载正常 - 如何修复/调试?

我正在针对 sql server 2012 数据库使用实体框架 4.3.1,并且我有一个包含这些表的数据库(还有更多但相关位如下):

我正在运行以下代码片段:

打印了NOOOOOOO。

所以看起来延迟加载不起作用,但急切加载是。

在这种情况下,我到底能提供什么以及如何调试出了什么问题(这可能导致失败的原因是什么 - 对我来说感觉就像 EF 中的一个错误,但我推迟宣布这一点并将整个热气腾腾的堆扔掉窗口)?如果第二个工作正常,那么配置肯定没问题...?

0 投票
1 回答
136 浏览

c# - 为什么日期时间会阻止导航属性被加载?

我正在对 SQL Server 2012 数据库使用实体框架 4.3.1,并使用 DbContext POCO 方法。

我在数据库中只有两个表,它们看起来像这样:

表

注意:数据库中根本没有指定外键 - 我只是在模型中强制执行关系(我无法更改数据库)。

它们每个都有一行数据,如下所示:

数据

我执行了以下查询以确保连接有效:

验证

现在,我有以下实体:

这是上下文:

当我运行这段代码时,我会Why is this printed?打印到我的控制台 - 我不希望你可以看到应该填写导航属性(我什至明确包含它):

现在,这真的很奇怪:如果我只是从类中注释掉该DeliveryDate属性,One它就可以正常工作(我会This is what I expect打印到控制台)。

这里有什么问题,我该如何解决?

注意:如果我查看变量DeliveryDate上的属性,one它已正确设置为预期值,因此数据库中的日期必须是正确的,并且实体框架完全能够实现它。

更多信息: 它是一个日期这一事实并不重要 - 如果是这样,说一个 nvarchar 它仍然失败 - 似乎任何简单的属性都会导致整个事情崩溃 - 这对我来说就像一个错误......

0 投票
1 回答
268 浏览

entity-framework - Entity Framework 4.3.1 Table Per Type Code First 在 SQL Server Express 2008 和 SQL Server 2008R2 中生成不同的架构

我正在使用 EF CodeFirst 生成相当大的模式,包括 TPT 表,例如

我一直在针对 SQL Server Express 2008 安装进行开发,这可以完美地生成表,即带有 ReplacementCharged_Id 列的 ReplacementRentalDongles 表,它引用了 Money 表。

但是,当我运行相同的代码,但使用 SQL Server 2008R2 Developer 实例时,生成的表是不同的!在这种情况下,ReplacementCharged_Id 列最终会在“基本”表 BaseConstraint 中生成。

这是 EF 4.3.1 中的错误,因为不同的 SQL Server 版本最终会创建不同的架构?EF 是否与 SQL 2008R2 兼容?

0 投票
3 回答
1009 浏览

asp.net-mvc-3 - 如何减少对控制器的注入依赖项的数量

我正在使用 MVC3、Entity Framework v4.3 Code First 和 SimpleInjector。我有几个看起来像这样的简单类:

我有另一个看起来像这样的实体:

每个 Thingy(当前)都有自己的 Manager 类,如下所示:

因此,我的 MainController 如下:

实际上,这个控制器中注入的依赖项是原来的两倍。它闻起来臭臭的。当您还知道存在具有所有或大部分相同依赖项的 OtherController 时,气味会更糟。我想重构它。

我已经对 DI 有足够的了解,知道属性注入和服务定位器不是好主意。

我无法拆分我的 MainController,因为它是一个单一的屏幕,需要通过单击一个保存按钮来显示和编辑所有这些内容。换句话说,单个 post 操作方法可以保存所有内容(尽管我愿意更改它,只要它仍然是单个 Save 按钮)。这个屏幕是用 Knockoutjs 构建的,如果有影响的话,它会用 Ajax 帖子保存。

我幽默地使用了环境上下文,但我并不肯定这是正确的方法。我也幽默地使用了注入 Facade。我也想知道我是否应该在这一点上实现一个命令架构。(以上所有内容不只是将气味转移到其他地方吗?)

最后,也许独立于上述三种方法,我是否应该使用一个具有显式方法的 LookupManager,例如 GetAThings()、GetAThing(id)、GetBThings()、GetBThing(id) 等?(但是那个 LookupManager 需要注入几个存储库,或者一种新型的存储库。)

除了我的想法之外,我的问题是,重申一下:重构此代码以减少注入依赖项的疯狂数量的好方法是什么?

0 投票
3 回答
2935 浏览

.net - EF 4.3.1 和 EF 5.0 DbSet.Local 比实际的数据库查询慢

我有一个包含大约 16,500 个城市的表的数据库,以及该数据库的 EF 数据模型(数据库优先)。我使用代码将它们预加载到内存中:

...然后在使用它们时,我尝试了以下每个查询:

第一个查询很快(约 10 毫秒),但第二个查询第一次运行大约需要 2.3 秒(尽管在此之后调用它比第一个查询快)。

这没有任何意义,因为 SQL Server Profiler 会验证第一个查询是否正在访问另一台计算机上的数据库,但第二个不是!

我试过关闭Db.Configuration.AutoDetectChangesEnabled,我试过预先生成视图。

我该怎么做才能.Local更快?(并非所有运行此应用程序的客户端都将在快速 LAN 上。)

0 投票
1 回答
1673 浏览

c# - 实体框架 4.3.1 -> 5.0 异常:“EntityType 没有定义键。定义此 EntityType 的键。”

在 Entity Framework 4.3.1 中,我有以下模型,它们运行良好:

升级到 EF 5.0 后,当我尝试运行此应用程序并访问关联的 DbContext 时出现以下异常:

我该如何解决这个问题?这似乎是一种回归。

0 投票
2 回答
748 浏览

c# - 是否可以在 SaveChanges 之后停止实体框架“修复”关系?

我从 Entity Framework 4.3.1 中得到了这个异常(顺便说一下,来自在 Visual Studio 2010 中针对 .NET 4 构建的 ASP .NET MVC 3 Web 应用程序):

System.InvalidOperationException:对数据库的更改已成功提交,但在更新对象上下文时发生错误。ObjectContext 可能处于不一致的状态。内部异常消息:无法将对象添加到对象上下文。对象的 EntityKey 有一个 ObjectStateEntry,表明该对象已经参与了不同的关系。

我做了一些谷歌搜索,然后我来到了这个(在 msdn 上):

保存时出现 InvalidOperationException

在那个 Jeff Derstadt (接受的答案)中说:

然后,当您调用 SaveChanges 时,上下文会保留更改,然后尝试修复状态条目。当它这样做时,它会执行“密钥修复”,将临时 EntityKeys 转换为完整的 EntityKeys。在这种情况下,临时密钥 TKP2 现在将等于 P2 的密钥。上下文尝试将状态管理器中的密钥条目“提升”为完整的实体条目,并在此过程中修复图形。这是因为存在冲突而发生异常的地方:P1.Spouse = P2,因此 P2.Spouse 应该 = P1,但由于添加了项目,P2.Spouse 已经等于 P3,并且 EntityReference 不能有多个值。

我在这里以一种“肮脏”的方式思考,所以我的问题是......

因为我并不真正关心保存更改后对象图的样子(这是我的请求的结束,所以无论如何都被丢弃了)并且数据已被插入(当我在 SQL Server 中查看它时实际上完全没问题在我让它在调试器中继续运行之后) - 有没有办法告诉实体框架不要执行此步骤(因此不会出现此异常,并且可能也节省了一些时间)?

0 投票
3 回答
327 浏览

entity-framework - 实体框架 - 对象上下文的闭包

在使用 EFProfiler(BTW 绝对棒的工具!)分析我们的一些实体框架应用程序之后,似乎在大多数情况下,所有对象上下文都没有关闭。

例如,在本地运行后,EF Profiler 告诉我打开了326 个Object Context,但只关闭了 1 个?

所以我的问题是,我应该担心这个吗?还是它在实体框架中自成一体?

0 投票
1 回答
3500 浏览

entity-framework - 如何避免实体框架 4.3.1 中的重复插入

我有一个使用代码优先方法创建的小模型 - 一个City只包含有关城市名称的信息的类。

一个Post类表示邮政编码和城市参考的组合

两个实体都在上下文中定义了它们的集合作为它们的配置

我已经使用静态方法创建了用于操作这些对象的类,这些静态方法获取或创建对象并将它们返回给调用者。

想象一下,我称之为方法

方法GetCity被启动,如果不存在,方法创建一个city然后调用该SaveChanges()方法。

如果我将返回city的实体设置为新Post实例,实体框架会为相同的city.

我怎样才能避免这种行为?我只想插入在上一步中创建或加载的post引用的新实体。city

0 投票
2 回答
9288 浏览

c# - 使用 EntityFramework dbContext 获取另一个表中的计数记录

我首先使用 EntityFramework 4.3.1 和 Database 和 dbcontext。

假设我有 2 个表: 客户订单 ,客户和订单之间存在一对多的关系。

我有两个要使用 EntityFramework 运行的查询,以获取不同网页的特定信息。

第一个是: 获取自特定日期以来下订单的所有客户。

因此,此查询的普通 SQL 可能类似于:

我无法弄清楚如何在 EntityFramework 中执行此操作。

我从以下代码开始,但不知道从哪里开始。

我试图做(c.Order.OrderDate > someDate),但这不起作用,因为我无法从 Order 获取 OrderDate 属性,因为 EntityFramework 将 Order 视为一个集合。

第二个问题是: 获取给定集合或Customers的订单总数

此查询的普通 SQL 可能如下所示:

同样,我不知道如何在 EntityFramework 中执行此操作。如何从 Order 表中仅获取 CustomerID 和 CustomerID 的记录总数?我不知道如何进行分组,这样它就不会只返回每个客户的每一个订单记录。

----------------------------------


更新:这是我在 Eli 反馈后的最终代码。

要获取具有在给定日期之后创建的订单的客户:

要获取给定客户集合中每个客户的订单总数:

从上面,我可以遍历集合并从匿名类型中获取值: