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合法嗎? 是的,了解原因