问题标签 [dbcontext]

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 投票
2 回答
1798 浏览

unit-testing - 对存储库进行单元测试是否有意义?实体框架 4.1

我一直在观看各种视频并阅读各种关于对存储库进行单元测试的博客。

最常见的模式是创建一个 Fake 存储库,该存储库实现与真实存储库相同的接口。然后假的使用内部字典或其他东西。

所以实际上你是在对永远不会投入生产的 fakerepository 的逻辑进行单元测试。

现在您可以使用依赖注入通过使用一些 IDBContext 接口来注入模拟 DBContext。但是,您只是在测试实际上只是转发到 dbcontext (被模拟)的每个存储库方法。

因此,除非每个存储库方法在调用 dbcontext 之前都有很多逻辑,否则它似乎有点毫无意义?

我认为将存储库上的测试作为集成测试并实际让它们访问数据库会更好吗?

新的 EF 4.1 使这变得简单,因为它可以根据测试项目中的连接字符串动态创建数据库,然后您可以在运行测试后使用 dbcontext.Database 方法将其删除。

0 投票
1 回答
824 浏览

asp.net-mvc-3 - EF 4.1 POCO 在 Db.Entry() 之后访问导航属性

问题

不知道这样做的正确方法是什么......我有一个简单的课程:

在我的 MVC 3 项目中,我有一个用于编辑事件描述和(可选)从下拉列表中选择上一个事件的表单。表单被提交给一个动作,并且像 MVC 3 一样,自动映射到一个Event

PreviousEvent在保存我的实体之前,我想做一些需要访问的额外验证。但是,导航属性始终是null当我在上面的代码中访问它时。这是有道理的——表单直接映射到我的 POCO 类,Event而不是 EF 创建的代理。

问题

有什么方法可以将我的修改换成Event它的代理,以便 EF 可以帮助加载它的导航属性?我可以:

...但是以这种方式加载所有导航属性似乎很普通(这个类比显示的要多得多),我希望 EF 有更好的方法来做到这一点。真的吗?

0 投票
1 回答
8324 浏览

c# - EF + 通用存储库 + 加载相关实体:只有显式加载有效

我有两个简单的 POCO 课程;我正在尝试MyY使用Y. 我已经尝试了多种方法来做到这一点,并且认为我可能遗漏了一些明显或简单的东西。

我已经通过我的构造函数的子类中的这个调用关闭了延迟加载DbContext

检索X我尝试过的

这没有用。我试过了

这有效,但需要两次往返数据库。我试过了

这也有效,但“削弱”了我的模型(通常投影到新类型并没有那么糟糕,但这些 EF POCO 的“形状”非常适合我稍后将通过 WCF 发送的 DTO)。

我终于尝试按照另一个问题的答案virtual中的建议从该MyY物业中删除,但这根本没有效果。

最后,我想使用通用存储库模式。我最终得到的是以下设计,部分显示,它支持显式加载(不是首选)和在修改为正常工作时急切加载。如何修改它以获得单个数据库往返急切负载?

示例用途:

基于答案的更新:

事实证明我的临时代码示例撒了谎(上面的那些单行代码)。我实际上已经将 的结果缓存.Include在一个局部变量中,但应用了.FirstOrDefault.not.Set<X>的结果.Include。这是对 的修复ApplyEagerLoading,它反映了其他人在相关问题中的建议:

0 投票
2 回答
161 浏览

entity-framework - 处理“N+1”+计数问题的正确方法是什么?

假设模型如下:

在帖子/索引页面中,我想显示一个帖子列表,其中包含每个帖子的评论数(不是所有帖子的评论总数)。

1:如果我使用

它将加载所有相关评论的整个实体,实际上我只需要评论计数。

2:如果我一个一个地计算每个帖子的数量:

这是一个 N+1 问题。

有人知道正确的方法吗?

谢谢!

0 投票
1 回答
1168 浏览

entity-framework-4.1 - 我可以在 Entity Framework 4.1 中使用自我跟踪实体和 DBContext 吗?

我想知道 DBContext (EF 4.1) 是否支持自我跟踪实体。如果是,我该怎么做?

0 投票
2 回答
11151 浏览

c# - N 层应用程序中的多个 DbContext

DbContexts我正在创建我的第一个 N 层 MVC 应用程序,并且遇到了如何使用我的数据库优先方法管理多个应用程序的障碍。

我有以下几层

我不想在我的服务层中引用实体框架,但我看不到如何创建接口或其他东西来管理两个上下文。我让它使用 IDatabaseFactory 中扭曲的单个上下文,但我似乎找不到管理两个上下文的方法。

下面是我UnitOfWork在我的 Service ctor 中创建的,但我从每一个角度来看,我仍然与 相关SiteModelContainer,而实际上我有另一个上下文。

0 投票
1 回答
2658 浏览

ef-code-first - 实体框架代码优先 DBContext ObjectStateManager 错误

我收到一个错误“ An object with the same key already exists in the ObjectStateManager. The ObjectStateManager cannot track multiple objects with the same key.

我知道当我调用 CheckIfNameChanged(TestObject testObject) 方法时,我向 ObjectContext 添加了一个实体键,当我调用 _unitOfWork.TestObjectRepository.Update(testObject) 时附加或编辑代码:

这是发生冲突的地方,我在 ObjectStateManager 中有两个相同的实体键。有没有办法解决这个问题,而无需我去上下文分离实体,或者有其他方法吗?将实体与上下文分离的最佳方法是什么?

0 投票
1 回答
16289 浏览

c# - DbContext 不会保持连接打开以供重复使用

我正在尝试重用现有的数据库连接,以便我可以在TransactionScope不调用 MSDTC 的情况下使用 a 执行多个数据库操作。

实体框架(使用DbContext4.1 版本中的新 API)似乎不想保持显式打开的连接打开。旧ObjectContextAPI 保持连接按预期打开并记录在案

由于DbContextAPI 只是ObjectContext在引擎盖下使用,我预计会有相同的行为。有谁知道此更改是有意的还是已知问题?我在任何地方都找不到它的记录。

0 投票
2 回答
764 浏览

asp.net-mvc-3 - MVC 3,EF4,代码优先数据库初始化程序错误

尝试使用初始化程序设置我的数据库时遇到了一些麻烦。我有 3 个表,LabTest->LabValue<-LabIndicator,这就是我的编码方式:

这就是我在 DBContext 中编写 Db Intializer 的方式:

问题是,当我运行它时,EF 尝试创建数据库时出现此错误:

INSERT 语句与 FOREIGN KEY 约束“LabIndicator_LabValues”冲突。冲突发生在数据库“SummumnetDB”、表“dbo.LabIndicators”、列“ID”中。该语句已终止。希望你能解决,谢谢。

0 投票
2 回答
2573 浏览

.net - 查询实体框架(4.1)DbContext不返回任何结果

将 Entity Framework 4.1 与 SQL Server 2008 R2 Express 一起使用。

我有一个带有 IDbSet<Users> 属性的强类型 DbContext(代码中的 ctx),它代表数据库中的一个表 [Users]。当我执行时:

result.Count为0 就好像数据库中没有任何内容一样,尽管该表中有记录。我检查了 ctx.Database.Connection 并且它确实有正确的连接字符串。

我执行了

获取将要执行的 SQL,当我在 SQL 管理工作室中执行给定的语句时,我确实得到了用户列表。

好像查询从未执行过,我无法确定可能是什么问题。