紧接着我关于嘲笑DbContext的另一个问题.我还有另外一个关于模拟 EF Code First的问题.
我现在有一个更新的方法,如下所示:
if (entity == null)
throw new ArgumentNullException("entity");
Context.GetIDbSet<T>().Attach(entity);
Context.Entry(entity).State = EntityState.Modified;
Context.CommitChanges();
return entity;
Run Code Online (Sandbox Code Playgroud)
Context是我自己的DbContext的接口.
我遇到的问题是,我该如何处理
Context.Entry(entity).State
.
我已经介绍了这段代码,当我有一个真实的DbContext作为我的Context接口的实现时,它就可以工作了.但是当我把假的上下文放在那里时,我不知道如何处理它.
DbEntityEntry类没有构造函数,所以我不能在我的伪上下文中创建一个新构造函数.
有没有人在CodeFirst解决方案中嘲弄或伪造DbEntityEntry有什么成功?
或者有更好的方法来处理状态变化吗?
我们的代码中有一个通用的更新方法
foreach (var entity in entityList)
{
Context.GetIDbSet<T>().Attach(entity);
Context.SetState(entity, EntityState.Modified);
}
Run Code Online (Sandbox Code Playgroud)
我通过传入一个实体的枚举并按每个实体调用一次来测试它.
我发现的是1000个实体的枚举大约需要47秒才能运行.这是预期的行为吗?或者代码片段有问题吗?
分析显示Attach()方法比SetState()方法慢.
我运行它的测试是在一个有50个属性的实体上,如果有任何影响则没有关系.
我最近从MSTest转换为NUnit.我这样做了
[TestMethod]
by [Test]
,[TestClass]
by [Test]
等由于我已经这样做了,Resharper没有在方法旁边显示小测试图标.如果我使用Ctrl + U运行测试,则R显示正确的计数,但实际上并不运行任何计数.
有谁有想法吗?
编辑:必须有一些搞砸了我的程序集的东西,因为我创建了一个名为Test.Web的新程序,并创建了一个只有[TestFixture]的简单类,Resharper立即识别它.
我们正在运行测试使用karma
和phantomjs
上周,我们的测试神秘地开始崩溃phantomJS,错误为-1073741819.
基于此线程,Chutzpah
似乎代码表明PhantomJS的本机内存故障.
经过进一步调查,我们一直看到幻像在750MB左右的内存中崩溃.
有没有办法配置Karma,以便它不会遇到这个限制?或者告诉它冲洗幽灵的方法?
到目前为止,我们只进行了大约1200次测试 我们大约是项目的1/4,因此5000个UI测试似乎不可能.
我们中的一些人正在阅读有关Haskell的一些内容,我们昨天正在讨论一些概念.问题是Haskell是一种懒惰的语言,它如何处理检索列表的第n个元素?
例如,如果我们有
[2,4..10000000] !! 200
Run Code Online (Sandbox Code Playgroud)
它实际上是否会将列表填充到200个元素中?或者它将其编译成类似于的等式
n*step + firstValue
Run Code Online (Sandbox Code Playgroud)
然后返回那个计算?出现这种情况的原因是有人试图想出一个程序很容易耗尽内存的例子,并且想到遍历一个(足够大)的列表是第一个出现的候选人.
我有一个包含一些数据的jqgrid,其中第一列是数据库中的数字PK.
当我的delete方法被调用时,它会传入网格的rowId(它应该.)但是,我的后端不知道哪一行是什么数据.有没有办法可以将行ID设置为我的PK字段?或者有没有办法强制它传递删除时的PK值而不是行ID?
谢谢
我们首先使用EF代码,并为我们的销售数据库提供数据上下文.此外,我们有一个位于数据上下文之上的类,并执行一些基本的CRUD操作.
例如,我们有以下功能:
public static T Create<T>(int userId, T entity) where T : class, IAllowCreate
{
if (entity == null)
throw new ArgumentNullException("entity");
using (SalesContext dc = new SalesContext())
{
dc.Set<T>().Add(entity);
dc.SaveChanges();
return entity;
}
}
Run Code Online (Sandbox Code Playgroud)
我找到了一个如何创建伪上下文和IDBset属性的示例.我开始实现这一点,但我遇到了一个问题.
我们在代码中使用dc.Set()非常自由(如上所示),因为我们尝试创建通用的CRUD方法.我们不会使用ReadCustomer,ReadContact等,而只需执行Read().但是,dc.Set返回一个DbSet,而不是一个IDbSet,所以我无法模拟它.
有没有人能够模拟或伪造DbContext并仍然使用Set功能?
我正在尝试运行以下代码,但得到一个转换错误.如何重写我的代码以实现相同的目标?
boolResult= (bool?)dataReader["BOOL_FLAG"] ?? true;
intResult= (int?)dataReader["INT_VALUE"] ?? 0;
Run Code Online (Sandbox Code Playgroud)
谢谢
我在Asp.Net MVC 5和Visual Studio 2013中遇到了脚手架的问题我试图通过首先卸载它来重新安装扩展"Microsoft Visual Studio Asp.net MVC 5 Scaffolding".但我无法找到任何方法再次安装它.
我试图修复视觉工作室. - 没有运气我试图卸载visual studio并安装visual studio,但扩展仍然缺失
我是否必须重新安装PC或是否有快速修复?
在SSMS 2008 R2中,我们从右键菜单中选择默认的"选择前1000"和"编辑前200"查询.我已经看到你可以在哪里更改它在选项中返回的行数.
我所追求的是,我可以告诉它做一个SELECT*而不是扩展并包括每个字段吗?
这不是性能问题或任何事情,只是在查询超过5个字段的表时烦恼,我想做一个select*.
例如,如果我有一个包含以下字段的表:
当我右键单击此Persons表并选择"SELECT TOP 1000 ROWS"菜单时,我想要运行的查询是
SELECT TOP 1000 * FROM People
Run Code Online (Sandbox Code Playgroud)
并不是
SELECT TOP 1000 FirstName, LastName, Birthday, City, State, Zip FROM People
Run Code Online (Sandbox Code Playgroud)
编辑我怀疑对此没有真正的答案,但我想我是否有人想出来了.
c# ×2
sql ×2
asp.net-mvc ×1
haskell ×1
jqgrid ×1
karma-runner ×1
nunit ×1
phantomjs ×1
resharper ×1