Aufwand (C #) - "Sequenz enthält kein übereinstimmendes Element", wenn Daten an eine meiner Entitäten gesendet werden

c# effort entity-framework unit-testing

Frage

Ich versuche in meinem Projekt einige Komponententests für einige Webdienstaufrufe zu erstellen. Ich benutze Entity Framework 6.1.3 in meinem Projekt, um die Daten auf der Service-Ebene (mit einem Code-First-Ansatz) abzurufen. Ich habe nachgeforscht, wie man ein DatabaseContext-Objekt verspottet und ich habe herausgefunden, dass Effort das kann.

Ich habe die Dokumentation bei der Implementierung von Effort in meinen Komponententests befolgt, aber wenn ich versuche, Daten in meine Entitäten zu importieren, erhalte ich die Ausnahme "System.InvalidOperationException: 'Sequenz enthält kein passendes Element'". Ich bin mir nicht ganz sicher, warum das passiert. Jede Hilfe wird sehr geschätzt. Vielen Dank!

So sieht der Code aus ...

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

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

Hier sende ich Daten an die Entitäten ...

public static void AddTestData(IFakeDbContext context)
    {
        //**************** IT CRASHES HERE *********************
        context.FakeEntity1.AddOrUpdate(new FakeEntity1 
        {
           Name1 = "TestingName1",
           LastName1 = "TestingLastName1"

        });

        context.SaveChanges();
    }

Hier ist mein Entity Model ...

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

}

Hier ist mein 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;}

}

Ich habe auch eine andere Klasse FakeDbContext.Base, die OnModelCreating überschreibt.

Hier ist der Stack Trace:

StackTrace

Akzeptierte Antwort

Die Stapelüberwachung zeigt, dass die Ausnahme ausgelöst wird, wenn der Datenanbieter nach einem "Geschäftstyp von Name" sucht. Dies bedeutet, dass Sie einen Datentyp verwenden, den Effort nicht unterstützt. Dies wird durch ein Problem im Projekt Effort bestätigt.


Beliebte Antwort

hoffe das hilft.

Viele Antworten sagen, dass Sie FirstorDefault() in Ihren EF-Anweisungen hinzufügen FirstorDefault() aber dieser Fehler tritt auch in den falschen Eigenschaften auf, die Datenanmerkungen verwenden.

Achten Sie bei der Verwendung von Datenannotationen auf die hinzugefügten Eigenschaften.

Beispiel unten, verpasste ich die TypeName = "string" , die nvarchar hätte sein nvarchar da es der Datentyp in der Datenbank ist.

Beachten Sie auch die Order = n , (beginnt mit 0)

Bei der Aktualisierung eines früheren Kollegen-Quellcodes wurde dies festgestellt.

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

dann habe ich meinen Code mit korrigiert

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

:)



Related

Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow
Lizenziert unter: CC-BY-SA with attribution
Nicht verbunden mit Stack Overflow