Dynamic Translate zur Vermeidung von C # -Syntaxfehlern

Betrachten Sie die folgende Datenbanktabelle (SQL Server 2005). Ich möchte dies in EF (v6, .net 4.5.1) mit der Funktion "Übersetzen" verwenden, aber nach der Suche wird dies anscheinend nicht unterstützt.

CREATE TABLE Foo 
(
     pk INT NOT NULL PRIMARY KEY, 
     Foo VARCHAR(100)
)

Verwenden einer Konventionszuordnung, mit der eine Klasse erstellt wirdFoo mit einer EigenschaftFoo, das von der C # -Syntax nicht unterstützt wird. Ich habe versucht, dasColumnAttribute:

public partial class Foo
{
    [Key]
    public virtual int pk {get;set;}
    [Column("Foo")]
    public virtual string Name {get;set;}
}

Dies scheint zu funktionieren, aber ich möchte, dass die erste Seitenanforderung Datenmengen über gespeicherte Prozeduren und MARS lädt (und eine generische Struktur verwendet, damit ich sie auf anderen Seiten wiederverwenden kann), also habe ich die gespeicherte Prozedur aufgerufen und eine Schleife ausgeführt durch die Ergebnismengen aufrufenObjectContext.Translate via Reflection (ähnlich wie unten, dies wird jedoch abgekürzt):

var methTranslate = typeof(ObjectContext).GetMethod("Translate", new[] { typeof(DbDataReader), typeof(string), typeof(MergeOption) });

foreach (var className in classNames)
{
    // ...
    var translateGenericMethod = methTranslate.MakeGenericMethod(classType);
    // ...
    reader.NextResult();
    var enumerable = (IEnumerable)translateGenericMethod.Invoke(ObjectContext, 
        new object[] { reader, entitySet.Name, MergeOption.AppendOnly });
}

Vonmehrer things Ich habe gelesen, dass die ColumnAttribute-Zuordnung nicht unterstützt wird. Von MSDN:

EF berücksichtigt keine Zuordnung, wenn Entitäten mit der Translate-Methode erstellt werden. Es werden einfach Spaltennamen in der Ergebnismenge mit Eigenschaftsnamen in Ihren Klassen abgeglichen.

Und sicher genug, bekomme ich und Fehler:

Der Datenleser ist nicht mit dem angegebenen 'Namespace.Foo' kompatibel. Ein Mitglied vom Typ 'Name' hat im Datenleser keine entsprechende Spalte mit demselben Namen.

Das Problem ist, ich sehe keine Alternative oder Möglichkeit, das Mapping zu spezifizieren / anzudeuten. Ich könnte den Klassennamen ändern, aber das ist weniger wünschenswert als die Eigenschaftsnamen.

Umgehungen, oder eine andere Möglichkeit, Daten dynamisch zu laden, ohne @ zu verwendTranslate?

Antworten auf die Frage(2)

Ihre Antwort auf die Frage