먼저 엔티티 프레임 워크 코드에서 데이터베이스보기를 사용하려면 어떻게해야합니까?
먼저 엔티티 프레임 워크 코드에서 데이터베이스보기를 사용하려면 어떻게해야합니까?
답변:
저처럼 다른 데이터베이스 (제 경우에는 erp)에서 가져온 엔티티를 매핑하여 애플리케이션의 특정 엔티티에 연결하는 데만 관심이 있다면 테이블을 사용할 때 뷰를 사용할 수 있습니다. 같은 방식으로!). 분명히 해당 엔티티를 업데이트하려고하면 뷰를 업데이트 할 수없는 경우 예외가 발생합니다. 절차는 일반 (테이블 기반) 엔티티의 경우와 동일합니다.
FooViewConfiguration 파일을 사용하여 뷰에 다른 이름을 설정하거나 (생성자에서 ToTable ( "Foo"); 사용) 특정 속성을 설정합니다.
public class FooViewConfiguration : EntityTypeConfiguration<FooView>
{
public FooViewConfiguration()
{
this.HasKey(t => t.Id);
this.ToTable("myView");
}
}
FooViewConfiguration 파일을 modelBuilder에 추가합니다. 예를 들어 Context의 OnModelCreating 메소드를 ovveriding합니다.
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new FooViewConfiguration ());
}
[Table("myView")]
, 이것은 EntityTypeConfiguration
.
이것은 업데이트 일 수 있지만 EF 코드로 뷰를 사용하려면 먼저 [Table ( "NameOfView")]를 클래스 맨 위에 추가하기 만하면 다른 모든 사용자가 겪고있는 모든 작업을 거치지 않고도 모두 제대로 작동합니다. 또한 열 중 하나를 [키] 열로보고해야합니다. 다음은이를 구현하는 샘플 코드입니다.
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; }
}
}
그리고 컨텍스트는 다음과 같습니다.
using System.Data.Entity;
namespace SomeProject.Data
{
public class DatabaseContext : DbContext
{
public DbSet<SomeView> SomeViews { get; set; }
}
}
원하는 것이 비정규 화 된 객체 다발이면 클래스 IQueryable<TDenormolized>
에 공개 get-only 속성을 만들 수 있습니다 DbContext
.
에서 get
Linq 결과를 반환하여 비정규 화 된 값을 비정규 화 된 객체에 투영합니다. 프로그래밍 중이므로 select
명령문 만 사용하는 것이 아니라 DB View를 작성하는 것보다 낫습니다 . 또한 컴파일 시간 유형이 안전합니다.
ToList()
호출 과 같은 열거를 트리거하지 않도록주의 하십시오. 지연된 쿼리가 중단되고 결국 데이터베이스에서 백만 개의 레코드를 가져와 애플리케이션 서버에서 필터링 할 수 있습니다.
이것이 올바른 방법인지는 모르겠지만 시도해 보았고 효과가 있습니다.
나는 이것이 오래된 질문이고 여기에 많은 답변이 있다는 것을 알고 있지만 이 답변을 사용할 때 문제 가 발생했으며 패키지 관리자 콘솔에서 update-database 명령을 사용할 때 오류가 발생했습니다.
데이터베이스에 이미 '...'라는 개체가 있습니다.
이 문제를 해결하기 위해 다음 단계를 사용합니다.
도움이되기를 바랍니다.
migrationBuilder.Sql("CREATE OR REPLACE VIEW ...
. 따라서 동료들도이를 사용하여 데이터베이스를 업그레이드 할 수 있습니다.