Tradução dinâmica para evitar erros de sintaxe em C #
Considere a seguinte tabela de banco de dados (SQL Server 2005). Eu gostaria de usar isso no EF (v6, .net 4.5.1) com a função Traduzir, mas após a pesquisa parece que isso não é suportado.
CREATE TABLE Foo
(
pk INT NOT NULL PRIMARY KEY,
Foo VARCHAR(100)
)
Usando o mapeamento por convenção que criaria uma classeFoo
com uma propriedadeFoo
que não é suportado pela sintaxe C #. Eu tentei usar oColumnAttribute
:
public partial class Foo
{
[Key]
public virtual int pk {get;set;}
[Column("Foo")]
public virtual string Name {get;set;}
}
Isso parece funcionar, mas eu gostaria de fazer com que a solicitação de página inicial carregasse muitos dados via procedimento armazenado e MARS (e use uma estrutura genérica para que eu possa reutilizá-lo em outras páginas), então chamei o procedimento armazenado e fiz um loop através os conjuntos de resultados, chamandoObjectContext.Translate
via reflexão (semelhante à abaixo, mas abreviada):
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 });
}
Demúltiplo coisas Eu li, o mapeamento ColumnAttribute não é suportado. DeMSDN:
A EF não leva em consideração nenhum mapeamento quando cria entidades usando o método Traduzir. Ele simplesmente corresponderá os nomes das colunas no conjunto de resultados aos nomes das propriedades nas suas classes.
E com certeza, recebo um erro:
O leitor de dados é incompatível com o 'Namespace.Foo' especificado. Um membro do tipo, 'Nome', não possui uma coluna correspondente no leitor de dados com o mesmo nome.
O problema é que eu não vejo nenhuma alternativa ou maneira de especificar / dica no mapeamento. Eu poderia mudar o nome da classe, mas isso é menos desejável que os nomes das propriedades.
Quaisquer soluções alternativas, ou qualquer outra maneira de carregar dados dinamicamente sem usarTranslate
?