Como posso usar a visualização do banco de dados no código da estrutura da entidade primeiro,
Como posso usar a visualização do banco de dados no código da estrutura da entidade primeiro,
Respostas:
Se, como eu, você está interessado apenas em mapear entidades vindas de outro banco de dados (um erp no meu caso) para relacioná-las a entidades específicas de seu aplicativo, então você pode usar as visualizações como usa uma tabela (mapeie a visualização em o mesmo caminho!). Obviamente, se você tentar atualizar essas entidades, obterá uma exceção se a visualização não for atualizável. O procedimento é o mesmo que no caso de entidades normais (com base em uma tabela):
Use um arquivo FooViewConfiguration para definir um nome diferente para a visualização (usando ToTable ("Foo"); no construtor) ou para definir propriedades específicas
public class FooViewConfiguration : EntityTypeConfiguration<FooView>
{
public FooViewConfiguration()
{
this.HasKey(t => t.Id);
this.ToTable("myView");
}
}
Adicione o arquivo FooViewConfiguration ao modelBuilder, por exemplo, substituindo o método OnModelCreating do Contexto:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new FooViewConfiguration ());
}
[Table("myView")]
isso é indiscutivelmente mais simples do que usar a criação de um EntityTypeConfiguration
.
Isso pode ser uma atualização, mas para usar visualizações com Código EF primeiro simplesmente adicione [Table ("NameOfView")] ao topo da classe e tudo deve funcionar corretamente sem ter que passar por todos os obstáculos que todos estão passando. Além disso, você terá que relatar uma das colunas como uma coluna [chave]. Aqui está meu código de exemplo abaixo para implementá-lo.
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
namespace SomeProject.Data
{
[Table("SomeView")]
public class SomeView
{
[Key]
public int NameID { get; set; }
public string Name { get; set; }
}
}
E aqui está a aparência do contexto
using System.Data.Entity;
namespace SomeProject.Data
{
public class DatabaseContext : DbContext
{
public DbSet<SomeView> SomeViews { get; set; }
}
}
Se tudo o que você quer é um monte de objetos desnormalizados, então você pode apenas criar uma IQueryable<TDenormolized>
propriedade get-only pública em sua DbContext
classe.
No, get
você retorna um resultado do Linq para projetar os valores desnormalizados em seus objetos desnormalizados. Isso pode ser melhor do que escrever uma Visualização do banco de dados porque você está programando, não está limitado apenas pelo uso de select
instruções. Também é seguro para o tipo de tempo de compilação.
Apenas tome cuidado para não acionar enumerações como ToList()
chamadas, isso interromperá a consulta adiada e você pode acabar recebendo um milhão de registros de volta do banco de dados e filtrando-os em seu servidor de aplicativos.
Não sei se esse é o caminho certo, mas tentei e funciona para mim.
Eu sei que esta é uma pergunta antiga e há muitas respostas aqui, mas eu forcei a um problema quando uso esta resposta e ocorreu um erro ao usar o comando update-database no console do gerenciador de pacotes:
Já existe um objeto chamado '...' no banco de dados.
e eu uso estas etapas para resolver esse problema:
espero que ajude.
migrationBuilder.Sql("CREATE OR REPLACE VIEW ...
); Para que os colegas também possam usá-lo para atualizar seu banco de dados.