Effort(C#) - 将数据播种到我的任何实体时,'Sequence不包含匹配元素'


我正在尝试为我的项目中的一些Web服务调用构建一些单元测试。我在我的项目中使用Entity Framework 6.1.3来检索服务层的数据(使用代码优先方法)。我做了一些关于如何模拟DatabaseContext对象的研究,我发现Effort可以做到这一点。

我在单元测试中实现Effort时遵循了文档,但是当我尝试将数据播种到我的实体时,我得到一个“System.InvalidOperationException:'Sequence contains no matching element'”exception。我不完全确定为什么会这样。任何帮助都感激不尽。谢谢!

这是代码的样子......

  //THE CALLER -- Doing what Effort suggests to do.

    var dbConnection = DbConnectionFactory.CreateTransient();
        FakeDbContext = new FakeDbContext(dbConnection);
        DatabaseSeed.AddTestData(FakeDbContext);

这是我向实体播种数据的地方......

  //THE CALLER -- Doing what Effort suggests to do.

    var dbConnection = DbConnectionFactory.CreateTransient();
        FakeDbContext = new FakeDbContext(dbConnection);
        DatabaseSeed.AddTestData(FakeDbContext);

这是我的实体模型......

  //THE CALLER -- Doing what Effort suggests to do.

    var dbConnection = DbConnectionFactory.CreateTransient();
        FakeDbContext = new FakeDbContext(dbConnection);
        DatabaseSeed.AddTestData(FakeDbContext);

这是我的DatabaseContext ...

  //THE CALLER -- Doing what Effort suggests to do.

    var dbConnection = DbConnectionFactory.CreateTransient();
        FakeDbContext = new FakeDbContext(dbConnection);
        DatabaseSeed.AddTestData(FakeDbContext);

我还有另一个类FakeDbContext.Base来覆盖OnModelCreating。

这是堆栈跟踪:

堆栈跟踪

一般承认的答案

堆栈跟踪显示当数据提供程序正在查找“名称存储类型”时抛出异常。这表示您正在使用Effort不支持的数据类型。这是Effort项目中的一个问题所证实的。


热门答案

希望这可以帮助。

许多答案说您必须在EF语句中添加FirstorDefault() ,但是使用数据注释的错误属性中也会出现此错误。

使用数据注释时,请注意添加的属性。

我在下面的示例中错过了TypeName = "string" ,它应该是nvarchar因为它是数据库中的数据类型。

另外,请注意Order = n ,(从0开始)

在更新过去的同事源代码时遇到此问题。

[Display(Name = "Name")]
[MaxLength(4000)]
[Column("Name", Order = 14, TypeName = "string")]
public string Name { get; set; }

然后我纠正了我的代码

[Display(Name = "Name")]
[MaxLength(4000)]
[Column("Name", Order = 14, TypeName = "string")]
public string Name { get; set; }

:)





许可下: CC-BY-SA
不隶属于 Stack Overflow
这个KB合法吗? 是的,了解原因