问题标签 [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 投票
1 回答
415 浏览

c# - 如何通过 WCF 服务更新实体

我让实体框架 DbContext 在本地工作,直接连接到 SQL 数据库。

现在我试图将实体框架的东西放在 WCF 服务后面。WCF 服务将公开其自己的一组与底层实体相对应的服务层对象 (DataContracts)。客户端永远不知道底层数据存储和实体。

  • 获取数据很简单,只需一个 LINQ to SQL 和 .ToList();
  • 插入新对象还不错,通过其 OperationContract 从客户端将 DataContract 传递给 WCF 服务,然后 WCF 将调用 DbContext.Add(), DbContext.SaveChanges();

但是我如何进行更新?我需要保留PK吗?如果是这样,通常的做法是什么?

你的帮助很感激。谢谢。

0 投票
1 回答
2335 浏览

asp.net-mvc - 测试使用 DbContext 的存储库的最佳方法

在我的项目中,我遵循存储库模式以便轻松地对我的 ASP.NET MVC 应用程序进行单元测试。这使我可以轻松地模拟对象。

但是,我根本没有通过这种方式测试存储库逻辑。

例如,请参阅以下博客文章:

如何在 ASP.NET MVC 上使用通用存储库并通过模拟对它们进行单元测试

这就是我所做的以及我如何测试我的 ASP.NET MVC 应用程序。

您认为测试使用DbContext类来获取数据的存储库的最佳方法是什么?

  • 直接从数据库获取数据?(我认为这将是最糟糕的,但我想知道你的想法)
  • 我应该创建一个假数据库并用虚拟数据填充它并指向 EF 以连接该数据库吗?

以及您可能建议的任何其他方法。

编辑:

我在这里使用 EF 4.2。

0 投票
1 回答
239 浏览

c# - 在数据提供者接口后面管理 DBContext 状态

我有一个接口 IDataProvider 只公开(为了讨论)3个操作:

我使用 DBContext 访问 SQL CE 作为底层数据访问层数据提供者,我可以实现:

或者

或者

这三种实现当然会在连接和实体状态方面表现得非常不同。既然接口“规则”没有对此强制执行规则,那么哪个实现更好?或者,如果我们应该执行其中一个或另一个,可以做到吗?

0 投票
3 回答
3828 浏览

c# - Entity Framework 4.2:获取正确的数据库错误

在我的 ASP.NET MVC 3 应用程序中,我使用 EF 4.2。在我的数据库中,我有一个列的唯一约束。

我尝试插入相同的数据以查看得到的结果,但出现以下错误:

更新条目时出错。有关详细信息,请参阅内部异常。

在内部异常中,我可以看到有关唯一约束的完整错误。但是我怎样才能唯一地捕捉到这个异常来告诉用户这个:

您再次输入相同的值。

这是我目前所做的:

但这是一种通用方法。我想做的是提供一个特定的信息。

有什么想法吗?

编辑:

我厌倦了下面的但这次它没有抓住它:

我挖了一点,结果发现它抛出了一个System.Data.Entity.Infrastructure.DbUpdateException不包含异常号的异常类型。

编辑:

这是我如何解决问题的方法,但我确信这不是解决问题的最佳方法。知道如何重构这段代码吗?

0 投票
2 回答
4975 浏览

entity-framework-4.1 - 无法将 StoreGeneratedPattern.Identity 与数据库触发器生成的主键值一起使用?

这个问题与我在这里提出的另一个问题(Entity Framework 4.2 - How to implement TPT-Inheritance with Database-generated Primarykey Value?)有关,并且应该简单地澄清一下,如果我对主题中所述问题的假设正确与否.

问题(详细):

  • 我想使用 EF (4.1) 访问一个已经存在的数据库
  • 数据库对其表的主键值的生成有一些限制(有一个 UDF,它采用表名并返回下一个可用 ID)
  • 为了让我自己尽可能简单,我的第一种方法是定义数据库触发器(在插入之前),它调用 ID 生成 UDF 以在插入新数据行时设置新 ID
  • 然后我将我的 EDM 的 csdl 中相应实体的 StoreGeneratedPattern 属性设置为“Identity”,以便在将新生成的 ID 保存到数据库后将它们设置在实体对象中

结果是:

当我创建一个新的实体对象,将其添加到 DbContext 并在其上调用 SaveChanges 时,相应的数据行被插入到数据库中,但实体没有使用新的数据库生成的 ID 进行更新。当我尝试一次保存更多时,我意识到了这一点,它们之间存在关联(父子实体),因为子实体的外键属性无法正确设置,因为父实体的新 ID 未知数据库上下文。

这就是我问上面提到的关于 TPT 继承的问题的原因。

经过几天的研究并尝试了我想到的一切来解决这个问题,我想我意识到,这根本行不通。尽管 MSDN 上的 StoreGeneratedPattern 枚举文档和博客中的一些解释表明,应设置 StoreGeneratedPattern.Identity 以检索生成的值,但当数据库在插入新行时生成值时,主键并不适用与数据库触发器。

在考虑了很长时间之后,这对我来说似乎是完全合乎逻辑的,因为 EF 需要一些标准来检索数据库生成的值,我认为在大多数情况下这将是实体的身份。对于设置为自动增量(或标识列,...)的数据库列,这可能没有问题,因为 DBMS 提供了一些功能来检索最后插入的标识值(例如 MSSQL 中的@@identity)。但是,当使用触发器生成新的标识值时,EF 显然不知道如何查询新插入的行(而且我也无法想象任何好的独立于数据库的方式来执行此操作)。

所以我的实际问题是:上面的假设是正确的还是我在这里忽略了一些重要的东西?

提前感谢您对此的任何澄清/启发。

编辑(后续问题):

在阅读了 Ladislav 的回答后,出现了另一个问题:

如果我在 CSDL 中设置 StoreGeneratedPattern,我是否必须在 SSDL 中将其设置为相同的值(反之亦然)?edm 设计器的补丁暗示了这种情况,因为当您在 CSDL 中更改 StoreGeneratedPattern(通过设计器)时,它会自动同步 SSDL 中的 StoreGeneratedPattern。

0 投票
2 回答
5501 浏览

asp.net-mvc-3 - .NET MVC 3 在 Dbcontext 中回滚

在 MVC 3 中是否可以在调用 DbContext.SaveChanges() 后回滚数据库?

我的实体类:

我要做的是将 ImageFile 记录插入数据库,然后使用自动递增的 id 作为图像文件名,将图像文件保存到其他地方。当 System.IO 失败时,我想回滚数据库。

但是,上面的代码给了我这个错误信息:

0 投票
2 回答
18761 浏览

c# - 使用 Dbcontext 执行存储查询

我想使用ExecuteStoreQuery实体框架的功能,我想知道我的上下文变量没有ExecuteStoreQuery方法。

所以,我发现它是一种ObjectContext类方法,但我已经用于DbContext我的应用程序。我只是试图改变DbContextwith ObjectContext,但它带来了一些错误(例如,在 ObjectContext is not OnModelCreatingmethod )。

我如何ExecuteStoreQuery与 DbContext 一起使用,如果我不能,ExecuteStoreQuery在 DbContext 中是否有任何替代方案?

0 投票
1 回答
712 浏览

sql-server - Entity Framework 4.2:不带 PK 的表的 InsertFunction

在 Entity Framework 4.2 中,我试图将一个值插入到没有 PK 的表中。EF给我以下错误:

无法更新 EntitySet 'ConditionTypesForWebApplications',因为它有一个 DefiningQuery 并且 <ModificationFunctionMapping> 元素中不存在 <InsertFunction> 元素来支持当前操作。

从下面的讨论中,我了解到可以通过编辑 edmx 文件来调整它,但是当您使用DbContext类时,这不是最好的情况。

如何将具有外键的表更新到 ADO.Net 实体模型中的另一个表?

有没有更好的方法来实现这一点?

0 投票
1 回答
752 浏览

entity-framework - 如何在 Code First 中在多个上下文(相同基础的)之间动态切换

我正在开发一个解决方案,其中包含一个DbContext(名为CoreContext)的核心项目。此上下文包含一个实体 (Product) 以及其他几个实体,该实体引用抽象类 (ProductConstraints),为通用产品提供通用验证规则。永远不会直接使用此上下文。在同一解决方案中还有其他三个项目(Product1、Product2 和 Product3),它们继承了CoreContext(作为 ProductXContext)和ProductConstraints(作为 ProductXConstraints)类,它们实现了针对其特定产品的自定义验证规则。

还有另一个项目包含一个自定义CodeFirstMembership. 它的“用户”实体包含一个“产品”属性,用于定义用户将使用的产品。

最后,我有一个 MVC3 项目,我想根据当前用户的“产品”信息实例化适当的上下文。创建类似 a 的东西ContextFactory来接收这个产品并返回正确的DbContext. 我尝试了一些方法,但没有取得重大成功。

0 投票
1 回答
1640 浏览

c# - EntityFramework 4 - 在 foreach 中更新记录

我正在创建一个使用 EF4 和 DBContext 访问后端数据库的应用程序。

在应用程序的某个时刻,我拉回一组记录并对其进行迭代,更新值和时间戳。

代码:

当我这样做时,我的数据库值不会改变......时间戳和值字段保持不变。

有人能指出我正确的方向吗......?