我搜索过一些帖子,但是很短.我首先使用EF6代码尝试从已在数据库中设置的存储过程中获取结果.我的应用程序很简单,它从两个不同的服务器获取数据,执行一些业务逻辑,然后向用户显示.我可以使用.edmx文件正常,它将函数映射到xml文件中.当我使用Power Tools向自己展示XML文件时,我没有看到下面代码中的函数导入,所以我要么缺少设置,要么我无法使用ExecuteFunction().
我可以ExecuteFunction()先使用with代码吗?我的存储过程只返回记录.我有这个设置的原因是因为存储过程提供另一个应用程序,我们希望在一个地方(SSMS)保留对查询的所有更改.我意识到我可以使用ExecuteStoredQuery/ ExecureStoredCommand,但是如果我要使用该.edmx模型,我想坚持惯例.
如果我可以使用ExecuteFunction,在哪里以及如何配置我DbContext以识别存储过程?在我的设置下面,我收到错误
在容器{1}中找不到FunctionImport {0}
我可以使用Fluent API吗?谢谢.
public class JobContext : DbContext
{
public JobContext()
: base("name=JobContext")
{
// My context will only define a slice of the database
Database.SetInitializer<JobContext>(null);
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.ComplexType<Job>();
}
public virtual ObjectResult<Job> uspGetJobs(string startDate)
{
var startDateParameter = startDate != null ?
new ObjectParameter("startDate", startDate) :
new ObjectParameter("startDate", typeof(string));
return ((IObjectContextAdapter)this).ObjectContext.<Job>("uspGetJobs", startDateParameter);
} …Run Code Online (Sandbox Code Playgroud) 我试图弄清楚如何报告下面的代码中的任务列表抛出的所有异常.
此代码段的基本思想是:用户向处理程序发送请求,处理程序创建消息tasks并将它们发送到将它们发送到外部系统的类.我包括了下面涉及的方法.
我必须要有一些东西,因为我正在调试异常处理程序,并且任务Exception始终为null,因为它似乎是状态,Waiting for Activiation除非我留在断点足够长的时间.
// Handle the user request
public async void Handle(WriteScanToSys settings)
{
_successfulScanIds = new List<int>();
// create the messages as tasks
var tasks = _factory.CreateMessage(settings).Select(msg => SendScans(msg));
try
{
// wait for all of them to complete
await Task.WhenAll(tasks); // I had ConfigureAwait(false) here, but took it off
}
catch (Exception)
{
foreach (var task in tasks.Where(t => t.Exception != null))
{
// ELMAH
var errorLog = ErrorLog.GetDefault(null);
errorLog.Log(new Error(task.Exception));
} …Run Code Online (Sandbox Code Playgroud) 我想引用这些链接,因为它们突出了我的问题
为IIS APPPOOL创建SQL Server登录 - 在不同的计算机上创建IIS和SQL Server
和
将ASP.NET MVC应用程序的IIS 7.5应用程序池标识配置为SQL Server 2008 R2上的登录.
总结帖,我有ServerA跟IIS我的应用程序池,并ServerB用SQL Server.ServerASQL承认我的应用程序池作为登录,因为这是IIS居住,但现在我需要我的应用程序池来访问SQL的ServerB.
我试图ServerB为我的应用程序池创建一个SQL登录Domain\ComputerName$\IIS APPPOOL\AppPoolName,但它无法识别.它承认Domain\ComputerName$,但我的应用程序仍然无法正常工作.
我是否在正确的轨道上,如果是这样,我指定了什么用户名?我的DBA技能并不像他们应该的那样敏锐.谢谢.
我想知道是否有人在FakeItEasy 这篇文章中有类似的例子(原帖是在这里.我一直试图找到正确的设置,但无法正确.我在网上找不到任何例子.我开始教我自己单元测试,我决定使用FakeItEasy.到目前为止,我所有的项目都使用实体框架而不使用Repository/UOW模式,因为我认为DbSet和DbContext足以满足我的小规模应用程序.我明白有利可图EF和单元测试,但我仍然想知道这一点.我很确定我的尝试(见下文)我已经离开了,因为我得到的错误是
System.NotImplementedException:成员'IQueryable.Provider'尚未在类型'DbSet
1Proxy' which inherits from 'DbSet1'上实现.'DbSet`1'的测试双精度必须提供所使用的方法和属性的实现.
任何方向都会非常有帮助.谢谢.
var data = new List<Request>
{
request1,
request2,
request3
}.AsQueryable();
var fakeDbSet = A.Fake<DbSet<Request>>();
A.CallTo(() => ((IQueryable<Request>)fakeDbSet).Provider).Returns(data.Provider);
A.CallTo(() => ((IQueryable<Request>)fakeDbSet).Expression).Returns(data.Expression);
A.CallTo(() => ((IQueryable<Request>)fakeDbSet).ElementType).Returns(data.ElementType);
A.CallTo(() => ((IQueryable<Request>)fakeDbSet).GetEnumerator()).Returns(data.GetEnumerator());
var fakeContext = A.Fake<RequestPortalContext>();
A.CallTo(() => fakeContext.Requests).Returns(fakeDbSet);
var service = new RequestReadService(fakeContext);
var requests = service.GetAllRequests();
Assert.AreEqual(3, requests.Count);
Assert.AreEqual("Test1", requests[0].Name);
Assert.AreEqual("Test2", requests[1].Name);
Assert.AreEqual("Test3", requests[2].Name);
Run Code Online (Sandbox Code Playgroud) 我有一个到工厂接口的调用,该接口IMachine在命令处理程序中创建一个。IMachine从工厂返回的方法可以链接在一起,以在构建器类内部创建自己的方法。我FakeItEasy现在WithSpeeds遇到的问题是,除非我将每个方法调用都配置为返回false,否则它只能识别第一个调用(即)IMachine。有没有一种方法可以不配置每个单个调用,也可以不FakeItEasy识别链上的每个方法调用?我知道我一定做错了什么,因为如果我使用OrderAssertions,并且在没有设置我的伪造机器的情况下故意使订单失败,则表明调用了所有方法。谢谢您的帮助。
命令处理程序方法的一部分
public void Handle(FooCommand commandParm)
{
var entity = new Entity.Builder
{
Machine = _factory.CreateMachine(commandParm.MachineName)
.WithSpeeds(commandParm.ProcessingSpeed, commandParm.StartupSpeed, commandParm.ShutDownSpeed)
.WithOils(commandParm.Lubrication, commandParm.FinishingOil)
};
}
Run Code Online (Sandbox Code Playgroud)
测试
[TestMethod]
public void HandleSetMachineSettings_should_build_machine()
{
// Arrange
var settings = CommandUtilities.ReturnFooCommand();
var _factory = A.Fake<IMachineFactory>();
var machine = A.Fake<IMachine>();
A.CallTo(() => _factory.CreateMachine(settings.MachineName)).Returns(machine);
// Act
_handler.Handle(settings);
// Assert
machine.Should().NotBeNull();
A.CallTo(machine).Where(x => x.Method.Name.Equals("set_MachineNumber")).WhenArgumentsMatch(arg => arg.Get<int>(0) == settings.MachineNumber).MustHaveHappened(Repeated.Exactly.Once);
A.CallTo(() => machine.WithSpeeds(commandParm.ProcessingSpeed, commandParm.StartupSpeed, commandParm.ShutDownSpeed)).MustHaveHappened(Repeated.Exactly.Once);
A.CallTo(() => …Run Code Online (Sandbox Code Playgroud) c# ×3
fakeiteasy ×2
asp.net ×1
async-await ×1
asynchronous ×1
dbcontext ×1
dbset ×1
iis-7.5 ×1
sql-server ×1
unit-testing ×1