Entitätsframework-Code First Case Sensitivity bei String-PK / FK-Beziehungen

9

Ich habe eine ziemlich einfache zusammengesetzte Eins-zu-Viele-Beziehung, die unter Verwendung der POCO / Fluent-API definiert ist, von der eine Spalte eine Zeichenkette ist.

Ich habe festgestellt, dass die Daten in dieser Spalte in unserer Datenbank inkonsistent sind, dh "ABB", "ABB" - dies ist unser Haupt-ERP-System und wird von einer Vielzahl von Quellen gespeist, die hauptsächlich außerhalb unserer liegen Steuerung.

Dies führt zu Problemen beim ersten Verwenden von EF-Code beim Verknüpfen mit verwandten Tabellen, da der Join von EF ignoriert wird, wenn der Fall von PK / FK anders ist, obwohl SQL Profiler die korrekte SQL-Ausführung und Ergebnisse anzeigt.

Ich benutze WCF, also lazy loading und Proxy-Erstellung ausgeschaltet und bin bereit, verwandte Entitäten mit Include zu laden. zB.

%Vor%

Gibt es irgendwelche Lösungen außerhalb der Änderung des Datenbankschemas?

    
Matt Rowett 14.09.2011, 19:30
quelle

2 Antworten

2

EF Insensitiver Join-Vergleich

Hi Ich habe das gleiche Problem (obwohl nicht Code zuerst, aber mit einem generierten Modell)

Die Ursache ist, dass EF die Groß- und Kleinschreibung der Schlüsselfelder vergleicht und die zugehörigen Objekte nicht findet.

Ich vermute, das Problem liegt im "EDM Relationship Manager" und vielleicht gibt es eine Möglichkeit, dieses Verhalten zu überschreiben.

Ich habe einen einfachen Workaround dafür gefunden: Untercasting die zugehörigen Eigenschaften:

%Vor%

Es funktioniert tatsächlich, aber natürlich ist es ein lahmes Workoround. Ich bleibe dran für eine Weile, bis ich (oder jemand) mit einer besseren Lösung kommt.

Viel Glück!

    
Jerónimo Vargas 28.11.2011 15:05
quelle
0

Ich habe einen Workaround gefunden, der die Verknüpfung manuell "sticht", nachdem der Kontext die entsprechenden Zeilen aus der Datenbank abgerufen hat. Übersetzt zu Ihrem Problem würde es in diesen Zeilen sein:

%Vor%

Beachten Sie, wie wir den Kontext verwenden: [DbSet]. Lokal -Eigenschaft, um sicherzustellen, dass alle "Stiche" im Speicher ausgeführt werden, ohne weitere SQL-Aufrufe auszuführen. Ich lade die Mitglieder auch ohne Audits zur Leistungsoptimierung auf, so dass wir die Arbeit der EF-Vereinigung nicht wiederholen (in den Fällen, wo es funktioniert hat). Aber Sie könnten genauso einfach jede "Mitglied" -Instanz zuordnen.

    
Brian Hinchey 24.09.2012 01:27
quelle