Development Tip

코드 우선 엔티티 프레임 워크에서 뷰를 사용하는 방법

yourdevel 2020. 10. 5. 21:02
반응형

코드 우선 엔티티 프레임 워크에서 뷰를 사용하는 방법 [닫힌]


먼저 엔티티 프레임 워크 코드에서 데이터베이스보기를 사용하려면 어떻게해야합니까?


저처럼 다른 데이터베이스 (제 경우에는 erp)에서 가져온 엔터티를 매핑하여 응용 프로그램의 특정 엔터티와 연결하는 데만 관심이 있다면 테이블을 사용할 때 뷰를 사용할 수 있습니다. 같은 방식으로!). 분명히 해당 엔티티를 업데이트하려고하면 뷰를 업데이트 할 수없는 경우 예외가 발생합니다. 절차는 일반 (테이블 기반) 엔티티의 경우와 동일합니다.

  1. 보기에 대한 POCO 클래스를 만듭니다. 예를 들어 FooView
  2. DbContext 클래스에 DbSet 속성 추가
  3. FooViewConfiguration 파일을 사용하여 뷰에 다른 이름을 설정하거나 (생성자에서 ToTable ( "Foo"); 사용) 특정 속성을 설정합니다.

    public class FooViewConfiguration : EntityTypeConfiguration<FooView>      
    {
        public FooViewConfiguration()
        {
            this.HasKey(t => t.Id);
            this.ToTable("myView");
        }
    }
    
  4. FooViewConfiguration 파일을 modelBuilder에 추가합니다. 예를 들어 Context의 OnModelCreating 메소드를 ovveriding합니다.

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Configurations.Add(new FooViewConfiguration ());
    }
    

이것은 업데이트 일 수 있지만 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 전용 속성을 만들 수 있습니다 DbContext.

에서 getLinq 결과를 반환하여 비정규 화 된 값을 비정규 화 된 객체에 투영합니다. 프로그래밍 중이므로 select명령문을 사용하는 것만으로 제한되지 않으므로 DB View를 작성하는 것보다 낫습니다 . 또한 컴파일 시간 유형이 안전합니다.

ToList()지연된 쿼리를 깨뜨릴 수있는 호출 과 같은 열거를 트리거하지 않도록주의 하십시오. 그러면 데이터베이스에서 백만 개의 레코드를 다시 가져와 애플리케이션 서버에서 필터링 할 수 있습니다.

이것이 올바른 방법인지는 모르겠지만 시도해 보았고 효과가 있습니다.


나는 이것이 오래된 질문이며 여기에 많은 답변이 있음을 알고 있지만 답변을 사용할 때 문제 가 발생했으며 패키지 관리자 콘솔에서 update-database 명령을 사용할 때 오류가 발생했습니다.

There is already an object named '...' in the database.

and I use these steps to solve this issue:

  1. run this command in Package Manager Console:Add-migration intial
  2. Under the Migrations folder, you can find ..._intial.cs file, open it and comment or delete any command related to your class you want to map
  3. now you can normally use update-database command for any other change to your models

hope it helps.

참고URL : https://stackoverflow.com/questions/7461265/how-to-use-views-in-code-first-entity-framework

반응형