问题标签 [dbset]

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 回答
2995 浏览

c# - 实体框架:如何扩展 DbSet?

我正在尝试定义自己的 DbSet,例如:

并在 DbContext 中使用它

我面临的问题是它Users在运行时为空(因此无用),但我不知道为什么。类似的东西db.Users.Any(会抛出一个"value cannot be null"; 如果我替换并使用 DbSet 代替

一切正常。

有谁知道我是否以及如何解决这个问题,以便我可以使用自己的派生类?

编辑:

在收到一些评论后,我澄清了我这样做的原因:我希望能够在不更改代码的情况下轻松地从数据检索机制切换到另一种机制。例如,如果我决定在内存中进行缓存(缓存只是一个示例,可能我还想更改其他一些东西)我只是覆盖Any/Find/...inMyDbSet并从字典中读取而不是查询数据库,剩下的代码不变。这样,代码将执行“常规”操作,而无需考虑如何在后面检索数据。因此,如果有人可以指出一种方法来做到这一点,而无需扩展DbSet也可以回答问题的类。

非常感谢

0 投票
1 回答
686 浏览

asp.net - ASP.NET 数据库集加入

我有两个类,客户端和用户。用户是客户端中的一个字段(有一个外键)。我正在尝试加入,获取所有客户和相关用户(这是一对一的)。

我正在使用实体框架和一个为我提供数据的 Web 服务。

我目前正在让我的所有客户喜欢:

我还需要获取相关对象用户。我找到了一个告诉我这样做的例子:

这会引发异常,我需要使用 IQueryable。如果我更改我的功能,与 Web 服务的连接将不起作用。

我该如何做我想做的事?

编辑:

我从网络服务得到的例外是An error occurred while receiving the HTTP response to http://localhost:60148/WebService.svc. This could be due to the service endpoint binding not using the HTTP protocol. This could also be due to an HTTP request context being aborted by the server (possibly due to the service shutting down). See server logs for more details.

0 投票
1 回答
1274 浏览

c# - 如何使用 DbSet具有泛型类型

我有一个界面:

我已经将其实现为这样的实体:

在我的服务中,我希望该实体有一个属性,该属性返回其 DbSet,如下所示:

但这是不可能的,因为我正在返回一个DbSet<LanguageEntity>类型,而我必须DbSet<ILanguageEntity>按照编译器的说法返回一个类型。我应该怎么办?

0 投票
1 回答
1333 浏览

c# - DbContext 类的 IDbSet 属性的适配器模式

有没有办法使用此答案中描述的方法No FindAsync() method on IDbSet for DbSet properties of a DbContext?

编辑:

链接的答案包含如何构建从 IDbSet 继承的接口并添加对 DbSet 类的 SearchAsync 方法的支持的描述。我了解 Keith Payne 所写的所有内容,但我不知道如何在 DbContext 中使用它。

例如,我有一个看起来像这样的 DbContext:

如何使用 MyDbSet (答案中描述的类。)或类似的类,而不是 DbSet?

现在的问题是,Entity Framework 似乎只为 IDbSet 或 DbSet 类型的属性生成表。

0 投票
0 回答
4776 浏览

c# - 如何创建自定义 DbSet

如何创建要在我们的上下文中使用的自定义 DbSet ,

在这里,我从 DbSet 中获得了代码示例,下面提供了该代码示例。

在上下文中我有:

任何时候我们到达 " context.MyDbSet" 它都是null,将其更改为一个简单的 DbSet 它将起作用并且它已正确初始化,

里面会有更多的属性。

0 投票
0 回答
337 浏览

entity-framework - EF TPT 继承:每个孩子一个 DbSet?

在 MSDN 中,他们展示了如何通过以下示例实现 EF TPT:

关于(*)我有这个问题:

我可以在层次结构中为每个孩子拥有一个 DbSet 吗?IE:

我问这个是因为我想要一个主要的父类,所有其他类都从中继承,即:

因此,给定一个 ID,我知道它只对应一件事。
过去在其他项目中我没有这样做,并且使用了特定的 ID:“UserId”、“PictureId”、“GalleryId”。

在这种情况下,我将只有一个 DbSet?

0 投票
2 回答
1755 浏览

c# - EF6:在 DbSet.Local 中包含导航属性

我从外部源加载数据作为 xml,它被反序列化,然后我循环对象以将它们汇集到我的域实体中。

为了创建数据之间的关系并减少数据库调用,我编写了一个扩展方法来尝试从 DbSet.Local 中检索项目,如果它没有找到项目,那么它使用 DbSet.SingleOrDefault() 来查询数据库,如下所示.

try catch 块用于抑制我试图解决的问题。

由于某种原因,查询本地商店时的导航属性未填充。所以如果我使用类似的东西

作为我的 lambda,Participant nav 属性为空。

我觉得应该有某种方法可以让这段代码不会始终生成空引用错误。

在我的循环开始使用之前,我已经尝试从数据库中显式加载参与者和事件数据

但这没有什么区别。

有人可以告诉我为什么导航属性为空以及如何以最有效的方式填充它们吗?

而且,如果有人想知道我为什么不使用 Find(),那是因为外部数据是在许多属性上键入的,并且外部 id 字段不是我系统中的主键。

更新:

我不会花时间包含我的真实代码,因为有太多东西需要精简为一个可用的示例,所以我将尝试使用 Customer/Order/OrderItem 典型示例。

真正的问题是,当您有一个嵌套实体并尝试使用以下方法检查是否存在时:

即使在此使用之前将订单和客户显式加载到上下文中,它也会为订单抛出空引用错误

但是,如果你这样做:

它会起作用的。

我想了解为什么调用 Local 时它不起作用。当相关的导航属性已经加载到上下文中时,为什么我们必须访问数据库来获取相关的导航属性?还是我错过了什么?

0 投票
3 回答
361 浏览

entity-framework - 我应该有一个还是两个 DbSet?

我正在编写一个 MVC5 C# Internet 应用程序,我有一个名为的类MapCompany和一个分类为MapLocation.

每个MapCompany都有一个列表MapCompany's。我的问题是,对于上下文类,我应该只拥有 aDbSet<MapCompany>并添加MapLocations到特定的MapCompany,还是应该同时拥有 aDbSet<MapCompany>和 a DbSet<MapLocation>

编辑

以下是有关该应用程序的一些信息:

  1. 每个 MapCompany 可以有许多 MapLocations ~5-25
  2. 我希望能够通过其 ID 访问任何 MapLocation

因为我希望能够通过其 id 访问每个 MapLocation,如果只有一个DbSet<MapCompany>,是否会有很多数据库搜索,因为我必须搜索每个 MapCompany 才能通过其 id 找到 MapLocation?

由于数据库搜索的增加,每个都有一个 DbSet 会更经济吗?另外,这会使数据库变得更大吗?

无论哪种方式,每个 MapCompany 都需要有许多 MapLocations,并且我需要能够通过其自己的 id 有效地检索任何对象。

有了以上信息,我对是否应该为每个对象编写一个 DbSet 很感兴趣。

0 投票
1 回答
1477 浏览

c# - 如何使用 linq 在 dbset 中查找项目

我正在使用 C# 并且想要一些帮助来编写一个LINQ FindAsync语句来查找MapLocation具有特定id.

我有一个DbSet<MapCompany>,每个MapCompany都有一个List<MapLocation>

我有 的idMapLocation需要写一个LINQ语句才能找到MapLocation

这是我到目前为止所拥有的:

我可以请一些帮助来正确写这个吗?

提前致谢

0 投票
0 回答
975 浏览

c# - 实体框架:替换整个 DbSet 集合

我有一个泛型类,它对 T 类型的实体执行添加/更新。该AddOrUpdate()方法接受一个DbSet要作用的集合以及要在DbSet. 用于检查集合中ItemExists()是否已存在项目。如果是这样,我们会更新。如果没有,我们添加。该方法本质上将传入的项目的主键与表中的每个项目进行比较,如果匹配,则返回 true(以及数据库对象本身)。

该代码适用于具有少量记录的表。然而,对于较大的表,该ItemExists()方法非常低效。该方法使用一个 foreach 循环,该循环本身位于调用者方法中的另一个 foreach 循环内,给出 O(n^2)。

一种更简单的方法是简单地使用contextDataSet.Contains(item),但这会引发一个异常,说明Unable to create a constant value of type这是有道理的,因为 EF 无法将类转换为 SQL 查询。所以这是不行的。

DbSet<T>现在我的实际问题是:有没有办法用IEnumerable<T>传入的替换整个?传入的 IEnumerable 绑定到视图上的数据网格,并且基本上包括所有项目,因此从逻辑上讲,替换整个集合应该是安全的。任何帮助是极大的赞赏。

代码