努力 (C#) - 'Sequence contains no matching element' 将数据播种到我的任何实体时
Effort (C#) - 'Sequence contains no matching element' when seeding data to any of my entities
我正在尝试为我的项目中的几个 Web 服务调用构建一些单元测试。我在我的项目中使用 Entity Framework 6.1.3 来检索服务层的数据(使用代码优先方法)。我做了一些关于如何模拟 DatabaseContext 对象的研究,我发现 Effort 可以做到这一点。
在我的单元测试中实施 Effort 时,我遵循了文档,但是当我尝试将数据播种到我的实体时,我得到了一个 "System.InvalidOperationException: 'Sequence contains no matching element'" 异常。我不完全确定为什么会这样。任何帮助都感激不尽。谢谢!
代码如下所示....
//THE CALLER -- Doing what Effort suggests to do.
var dbConnection = DbConnectionFactory.CreateTransient();
FakeDbContext = new FakeDbContext(dbConnection);
DatabaseSeed.AddTestData(FakeDbContext);
这是我向实体播种数据的地方...
public static void AddTestData(IFakeDbContext context)
{
//**************** IT CRASHES HERE *********************
context.FakeEntity1.AddOrUpdate(new FakeEntity1
{
Name1 = "TestingName1",
LastName1 = "TestingLastName1"
});
context.SaveChanges();
}
这是我的实体模型...
[Table("rpt.FakeEntity1")]
public partial class FakeEntity1 : IFakeEntity1
{
[Key]
[Column(Order = 0)]
[StringLength(20)]
public string Name1 { get; set; }
[Key]
[Column(Order = 1)]
[StringLength(20)]
public string LastName1 { get; set; }
}
这是我的 DatabaseContext...
public partial class FakeDbContext: IFakeDbContext
{
public FakeDbContext(DbConnection dbConnection)
: base(dbConnection, true)
{
//Effort requires this.
}
}
public interface IFakeDbContext :IDisposable
{
DbSet<FakeEntity1> FakeEntity1 {get; set;}
}
我还有另一个 class FakeDbContext.Base 覆盖 OnModelCreating。
这是堆栈跟踪:
StackTrace
希望这对您有所帮助。
许多答案说您必须在 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 = 15, TypeName = "nvarchar")]
public string Name { get; set; }
:)
堆栈跟踪显示当数据提供者正在寻找 "store type from name" 时抛出异常。这表示您正在使用 Effort 不支持的数据类型。 issue in the Effort project.
证实了这一点
我正在尝试为我的项目中的几个 Web 服务调用构建一些单元测试。我在我的项目中使用 Entity Framework 6.1.3 来检索服务层的数据(使用代码优先方法)。我做了一些关于如何模拟 DatabaseContext 对象的研究,我发现 Effort 可以做到这一点。
在我的单元测试中实施 Effort 时,我遵循了文档,但是当我尝试将数据播种到我的实体时,我得到了一个 "System.InvalidOperationException: 'Sequence contains no matching element'" 异常。我不完全确定为什么会这样。任何帮助都感激不尽。谢谢!
代码如下所示....
//THE CALLER -- Doing what Effort suggests to do.
var dbConnection = DbConnectionFactory.CreateTransient();
FakeDbContext = new FakeDbContext(dbConnection);
DatabaseSeed.AddTestData(FakeDbContext);
这是我向实体播种数据的地方...
public static void AddTestData(IFakeDbContext context)
{
//**************** IT CRASHES HERE *********************
context.FakeEntity1.AddOrUpdate(new FakeEntity1
{
Name1 = "TestingName1",
LastName1 = "TestingLastName1"
});
context.SaveChanges();
}
这是我的实体模型...
[Table("rpt.FakeEntity1")]
public partial class FakeEntity1 : IFakeEntity1
{
[Key]
[Column(Order = 0)]
[StringLength(20)]
public string Name1 { get; set; }
[Key]
[Column(Order = 1)]
[StringLength(20)]
public string LastName1 { get; set; }
}
这是我的 DatabaseContext...
public partial class FakeDbContext: IFakeDbContext
{
public FakeDbContext(DbConnection dbConnection)
: base(dbConnection, true)
{
//Effort requires this.
}
}
public interface IFakeDbContext :IDisposable
{
DbSet<FakeEntity1> FakeEntity1 {get; set;}
}
我还有另一个 class FakeDbContext.Base 覆盖 OnModelCreating。
这是堆栈跟踪:
StackTrace
希望这对您有所帮助。
许多答案说您必须在 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 = 15, TypeName = "nvarchar")]
public string Name { get; set; }
:)
堆栈跟踪显示当数据提供者正在寻找 "store type from name" 时抛出异常。这表示您正在使用 Effort 不支持的数据类型。 issue in the Effort project.
证实了这一点