问题标签 [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.
c# - System.Entity.DbSetEntity Framework 中的工作机制
我想知道DbSet
实际上是如何设置自己的。
如果你看到 的定义DbSet
,它是一个具体的类。
但是所有的方法都没有实现,使它看起来更像interface
.
我看到DbSet
该类有一个基类和许多接口。但他们都没有真正实现像Add
并且它没有成员持有DbContext
我想知道发生了什么事。
所以在这个主题上,最初的问题将是..
这些方法在哪里
DbSet
实现?没有内存存储(?)
DbSet
?
谢谢大家的见解。
c# - EntityFramework - 无法使用 DbSet 删除实体
我正在尝试使用 EntityFramework 的 DbSet 从我的数据库中删除一个对象。代码如下:
我收到以下错误:“无法删除该对象,因为在 ObjectStateManager 中找不到它。”
请有人能告诉我我做错了什么吗?
.net - 我必须在我的 DbContext 上创建显式 DbSet 属性吗?
我将 Entity Framework 6 Code First 与空数据库一起使用。我创建了相当多的具有相当复杂的类层次结构的 POCO 类(相当多的抽象类和相当多的具体类)。我希望能够以某种方式装饰我的类,以便它们自动添加到 DbContext 中,而不必为每个类显式创建 DbSet 属性,但我担心当我尝试更新数据库时这会导致问题. 我在这里看到了几个线程,其中有人似乎在问类似的问题,但响应似乎更适合使用 DbContext.Set() 来获取对现有集合的引用。
entity-framework - EF 在运行时从 Type 获取 dbset 名称
目的:我需要获取实体typeof(UserAccount) = "UserAccounts"的dbset名称。但是在运行时我需要一个通用类型的循环,因此不知道示例“UserAccount”。只有 typeof 中的“名称”?
我用一些实体创建了一个 DbContext。我已经在谷歌上搜索了一段时间,但由于类型转换,它似乎对我不起作用?
请在本说明的底部查看我的方法GetDbSetName。
我对这个 EF 的东西很陌生 - 所以请帮助解决我的问题,如下所述;-)
定义了一个类型列表来控制输出:
问题在下面使用类型- 如果我使用“UserAccount”它可以工作并且我得到“UserAccounts”。但是我在运行时没有“UserAccount”,因为我处于一系列类型的循环中。我只有类型列表给出 e
这是给我挑战的方法 ;-) 意思是不编译。说我错过了一个集会?我知道这是很伪的,但这可以顺利完成吗?
c# - 使用 DbSet 应用 OrderBy
我正在尝试使用通用存储库实现分页和排序。如何将主键列作为 DbSet 中按列的默认顺序?
c# - 如何重载以 params object[] 作为参数的方法
我们的数据库在每个表上都定义了一个主键,该表具有一个短键和一个整数的组合键。因此,使用实体框架,我们可以尝试通过调用元素的Context.DbSet<>.Find(params object[] parameters)
方法来查找元素。在我们的代码中,这看起来像:
但是,在我们的代码中,我们使用结构来存储键值。我们的结构如下:
并有一些其他比较方法等。我们希望能够像这样调用 DbSet.Find 方法:
为了能够做到这一点,我们为此方法编写了扩展重载:
Intellisense 现在告诉我们 Find 方法已重载,一个版本接受DbKey key
作为参数,而另一个原始方法接受params object[] parameters
. 但是,在运行代码时,函数将始终调用原始方法,从不调用重载方法,因为 DbKey 也匹配原始参数,从而导致异常。我们如何解决这个问题?
entity-framework - 为什么 DBSet Add 失败,并且还破坏了 DBSet 中现有的 Customer 条目?
我们的编程涉及一些使用内存数据的模拟测试。
在下面的代码中,我使用了一个循环来查看 inMemoryDbSetCustomer 的内容,它包含了预期的数据。
可悲的是,当我尝试添加新客户时,1) inMemoryDbSetCustomer 无法添加客户 2) inMemoryDbSetCustomer.Add(someCust) 返回 NULL 3) inMemoryDbSetCustomer 似乎丢失了所有其他客户条目。
为什么 DBSet Add 失败,并且还破坏了 DBSet 中现有的 Customer 条目?
更新答案
感谢@Werlang 的建议。以下代码添加帮助:
此外,如果您像我一样使用 Moq 框架模拟 DBSet,那么下面的 stackoverflow 帖子将很有帮助,因为您可能会遇到类似的问题:
entity-framework - 修改了哪些删除 Collection 的步骤;枚举操作可能无法执行。错误?
我们的编程涉及一些使用内存中数据的模拟测试。因此,我们实现了以下代码,首先创建 Customer 对象的 In-Memory Data
在下一个代码摘录中(这是我们的“测试中的代码”),我将一个新客户添加到现有的内存数据中,然后在模拟对象上调用 SaveChanges。
稍后在代码中,我有以下代码摘录,其中 _context.Set() 将返回我们之前创建的 In-Memory Data DBSet
当我们调用 ToList() 时,它会抛出以下错误:
我们需要采取哪些步骤来阻止上述错误被抛出(最好不要更改太多我们的被测代码)?
c# - 使用 DbSet 操作对象和 IQueryable使用 NSubstitute 返回错误
我想使用NSubstitute通过模拟DbSet来对 Entity Framework 6.x 进行单元测试。幸运的是,Scott Xu提供了一个很好的单元测试库,EntityFramework.Testing.Moq使用Moq。所以,我修改了他的代码以适合 NSubstitute 并且到目前为止它看起来不错,直到我想测试DbSet<T>.Add()
方法DbSet<T>.Remove()
。这是我的代码位:
我创建了一个测试方法,如:
当测试方法调用set.Remove(blog)
. 它抛出一个InvalidOperationException
错误消息
收藏已修改;枚举操作可能无法执行。
这是因为在调用该方法data
时,假对象已被修改。set.Remove(blog)
但是,原始斯科特的使用方式Moq
不会导致问题。
因此,我set.Remove(blog)
用一个块包装了该方法,try ... catch (InvalidOperationException ex)
让该catch
块什么都不做,然后测试不会抛出异常(当然)并按预期通过。
我知道这不是解决方案,但是如何实现单元测试DbSet<T>.Add()
和DbSet<T>.Remove()
方法的目标?
c# - 从 dbSet 中获取主键列
我想写一个函数,它接收任何Entity
对象并通过自动确定的主键找到当前值并更新它。
你能给我指点什么方向吗?
这可能吗?