小编jmz*_*ski的帖子

EF 6 Code First存储过程 - 只读

我搜索过一些帖子,但是很短.我首先使用EF6代码尝试从已在数据库中设置的存储过程中获取结果.我的应用程序很简单,它从两个不同的服务器获取数据,执行一些业务逻辑,然后向用户显示.我可以使用.edmx文件正常,它将函数映射到xml文件中.当我使用Power Tools向自己展示XML文件时,我没有看到下面代码中的函数导入,所以我要么缺少设置,要么我无法使用ExecuteFunction().

  1. 我可以ExecuteFunction()先使用with代码吗?我的存储过程只返回记录.我有这个设置的原因是因为存储过程提供另一个应用程序,我们希望在一个地方(SSMS)保留对查询的所有更改.我意识到我可以使用ExecuteStoredQuery/ ExecureStoredCommand,但是如果我要使用该.edmx模型,我想坚持惯例.

  2. 如果我可以使用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)

c# stored-procedures entity-framework ef-code-first

10
推荐指数
1
解决办法
4909
查看次数

await Task.WhenAll(tasks)异常处理,记录任务中的所有异常

我试图弄清楚如何报告下面的代码中的任务列表抛出的所有异常.

此代码段的基本思想是:用户向处理程序发送请求,处理程序创建消息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)

c# asynchronous exception-handling async-await

8
推荐指数
2
解决办法
5740
查看次数

SQL Server在不同计算机上登录IIS APPPOOL - 同一个域

我想引用这些链接,因为它们突出了我的问题

为IIS APPPOOL创建SQL Server登录 - 在不同的计算机上创建IIS和SQL Server

将ASP.NET MVC应用程序的IIS 7.5应用程序池标识配置为SQL Server 2008 R2上的登录.

总结帖,我有ServerAIIS我的应用程序池,并ServerBSQL Server.ServerASQL承认我的应用程序池作为登录,因为这是IIS居住,但现在我需要我的应用程序池来访问SQLServerB.

我试图ServerB为我的应用程序池创建一个SQL登录Domain\ComputerName$\IIS APPPOOL\AppPoolName,但它无法识别.它承认Domain\ComputerName$,但我的应用程序仍然无法正常工作.

我是否在正确的轨道上,如果是这样,我指定了什么用户名?我的DBA技能并不像他们应该的那样敏锐.谢谢.

sql-server asp.net application-pool iis-7.5

6
推荐指数
1
解决办法
2823
查看次数

FakeItEasy DbSet/IQueryable <T> - 实体框架6

我想知道是否有人在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)

unit-testing fakeiteasy dbcontext dbset entity-framework-6

3
推荐指数
1
解决办法
4278
查看次数

C#FakeItEasy和方法链接:仅识别首次调用

我有一个到工厂接口的调用,该接口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# fluent-interface fakeiteasy

2
推荐指数
1
解决办法
414
查看次数