Verstärken Sie die Fremdschlüsselreferenzen in "Aufwand"


Frage

Ich verwende Effort in Visual Studio und C #, um eine Datenbank neu zu erstellen und zu testen. Ich schreibe eine Klasse für eine einzelne Tabelle und deshalb befülle ich nur die Datenbank mit Objekten aus dieser Tabelle. Mein Problem ist, dass die Effort-Datenbank möchte, dass die Fremdschlüssel des Objekts auf tatsächliche Objekte in der Datenbank verweisen.

Mein Fehler ist

System.Data.Entity.Infrastructure.DbUpdateException: Beim Aktualisieren der Einträge ist ein Fehler aufgetreten. Weitere Informationen finden Sie in der inneren Ausnahme.

System.Data.Entity.Core.UpdateException: Beim Aktualisieren der Einträge ist ein Fehler aufgetreten. Weitere Informationen finden Sie in der inneren Ausnahme.

System.Reflection.TargetInvocationException: Vom Ziel eines Aufrufs wurde eine Ausnahme ausgelöst.

NMemory.Exceptions.ForeignKeyViolationException: Fremdschlüsselverletzung [Table1 :: SettingsId]. Der Schlüsselwert [0] existiert in der referenzierten Tabelle [Table2 :: SettingsId] nicht. Fehlercode: RelationError

Da diese spezielle Tabelle viele Fremdschlüssel für Objekte mit vielen anderen Fremdschlüsseln hat, würde dies viel Arbeit erfordern. Gibt es eine Möglichkeit, das auszuschalten, damit ich diesen Tisch alleine testen kann?

Akzeptierte Antwort

Ich bin auch auf dieses Problem gestoßen und wollte die Tabelle im Rahmen der größeren Datenbank testen. Sie können eine Hilfsmethode erstellen, die nur alles instantiiert, was Sie benötigen, und die Datenbank oder Tabelle mit Referenzen als Ergebnis übergeben. Das hilft, weil Sie es aus jeder beliebigen Testmethode / Klasse aufrufen können, wann immer Sie möchten.


Beliebte Antwort

Sie könnten eine neue EDMX-Datei aus Ihrer Datenbank erstellen, um nur die Verwendung zu testen. Beispielsweise:

In Visual Studio wählen Sie Datei-> Neu-> Daten-> Entity DataModel. Wählen Sie "EF Designer aus der Datenbank". Wählen oder erstellen Sie eine Verbindung zu Ihrer vorhandenen SQL Server-Datenbank und speichern Sie die Verbindungseinstellungen in app.config als "testConnectionString".

Entfernen Sie im Datenmodell-Designer alle Fremdschlüsselbeziehungen, die Sie nicht benötigen. Speichern Sie den Designer und erstellen Sie das Projekt neu.

Übergeben Sie in Aufwand den Namen der Verbindungszeichenfolge (die beim Erstellen der neuen EDMX generiert wurde) an die CreateTransient Methode:

EntityConnection connection = Effort.EntityConnectionFactory.CreateTransient("name=testConnectionString");

MyDbContext context = new MyDbContext(connection);

Dadurch können Sie Werte in die Tabelle einfügen, ohne die zugehörigen Fremdschlüsseltabellen aufzufüllen.

Dies wird jedoch mit einer Warnung angezeigt: Wenn der zu testende Code Navigationseigenschaften verwendet, die von den Fremdschlüsseln abhängen, schlägt er fehl. Das lässt mich fragen, wie wertvoll diese Art von "Unit Testing" wirklich ist.





Lizenziert unter: CC-BY-SA
Nicht verbunden mit Stack Overflow
Ist diese KB legal? Ja, lerne warum