Assisti a várias apresentações do EF Code First e não vi como o EFCF funciona com stored procedures.
Como posso declarar um método que usará algum sp? Posso passar uma entidade para um método que chama sp sem mapear manualmente as propriedades da entidade para os parâmetros sp?
Além disso, o que acontece se eu mudar meu modelo? Isso deixaria cair meu sp enquanto recria a tabela do modelo? E quanto aos gatilhos?
Se essas coisas não forem suportadas, existem planos para apoiá-las no futuro?
Respostas:
EDIT: Minha resposta original para EF4.1 (abaixo) agora está desatualizada. Veja a resposta abaixo de Diego Vega (que trabalha na equipe EF na Microsoft)!
@gsharp e Shawn Mclean: De onde você está conseguindo essas informações? Você ainda não tem acesso ao ObjectContext subjacente?
Substitua a instrução "select" por um procedimento armazenado e pronto.
Quanto à sua outra pergunta: Sim, infelizmente seus sp's serão derrotados. Você pode precisar adicionar as instruções "CREATE PROCEDURE" em seu código.
Para EF 4.2:
fonte
Update: De EF6 em diante, EF Code First oferece suporte a mapeamento de procedimento armazenado para inserções, atualizações e exclusões. Você pode especificar o mapeamento de procedimento armazenado durante a criação do modelo usando o método MapToStoredProcedures. Também oferecemos suporte para a criação automática de procedimentos armazenados básicos para essas operações. Veja a especificação do recurso aqui .
Resposta original: Não teremos suporte para mapear procedimentos armazenados no modelo em Code-First na primeira versão, nem teremos uma maneira de gerar procedimentos armazenados automaticamente para operações CRUD de seus tipos. Esses são recursos que gostaríamos de adicionar no futuro.
Como foi mencionado neste tópico, é possível voltar para ObjectContext, mas DbContext também fornece APIs interessantes para executar consultas e comandos SQL nativos (por exemplo, DbSet.SqlQuery, DbContext.Database.SqlQuery e DbContext.Database.ExecuteSqlCommand). As diferentes versões do SqlQuery têm a mesma funcionalidade básica de materialização que existe no EF4 (como ExecuteStoreQuery: http://msdn.microsoft.com/en-us/library/dd487208.aspx ).
Espero que isto ajude.
fonte
fonte
Uma solução mais segura de tipo seria esta:
http://strugglesofacoder.blogspot.be/2012/03/calling-stored-procedure-with-entity.html
O uso desta classe é:
fonte
Para .NET Core (EntityFrameworkCore), consegui colocá-los em funcionamento.
Pode não ser o mais legal, mas definitivamente funciona.
A migração para adicionar o procedimento armazenado tem a seguinte aparência :
Eu poderia então chamá-lo com o seguinte código:
Mais tarde, tentei obter alguns dos dados relacionados (um para muitos dados de relacionamento, por exemplo, conteúdo do Post) e o blog voltou com o conteúdo do Post preenchido conforme solicitado.
fonte