Effort(C#) - 將數據播種到我的任何實體時,'Sequence不包含匹配元素'

c# effort entity-framework unit-testing

我正在嘗試為我的項目中的一些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);

這是我向實體播種數據的地方......

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;}

}

我還有另一個類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 = 15, TypeName = "nvarchar")]
public string Name { get; set; }

:)



Related

許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因