엔티티 프레임 워크 열 이름과 속성 매핑 dbentry

c# entity-framework entity-framework-core

문제

DbContext에 엔티티를 저장하는 동안 엔티티 속성을 데이터베이스 열 이름에 매핑하려고하는데 EF7에서 엔티티 속성을 매핑하는 방법을 알 수 없습니다.

마이그레이션으로 데이터베이스 스키마를 생성 한 후에는 열 이름이 항상 객체의 속성 이름과 같지는 않습니다. 예를 들어, 아래 개체 스키마 :

public class Document
{
    [Key]
    public int Id { get; set; }

    public string Name { get; set; }

    public User Author { get; set; }
}

ID , 이름AuthorId 열이 데이터베이스에 있어야 합니다. 다음으로 EntityEntry 속성을 반복 할 때 Id, Name 및 AthorId 열이 포함됩니다. ID와 이름을 쉽게 매핑 할 수 있습니다.
내가 찾고있는 것은 EntityEntry의 "AuthorId"가 Document의 Author 필드에 매핑된다는 것을 파악하는 것입니다.



backround에 : 나는 (DbContext에서 SaveChanges를 ()에 ChangeTracker에서) EntityEntries에서 열을 수정 얻을 것이다 보편적 인 객체의 버전 기록 메커니즘을 구현하고 적절한 컬럼과 새로운 값을 저장하고있다. 그런 다음 개체를 복원 할 때 이러한 변경 사항을 적절한 엔터티 필드에 매핑 할 수 있어야합니다.

EF6에 대한 비슷한 질문을 발견했습니다. Entity Framework는 속성 이름과 SQL에서 선택하는 열 사이의 매핑을 어디에 저장합니까? 그러나 이것은 매우 복잡하며 EF6에 고유 한 클래스를 사용합니다.

인기 답변

내 의견에 따라 Author 필드는 간단한 개체 / 구조체 (IE : DateTime , Enum 등) 또는 기본 요소 (IE : int , string 등)가 아닙니다. 따라서 Navigation Property 이며 개체의 ID 만 저장됩니다. 그런 다음이 ID를 사용하여 Author 객체의 복합 데이터를 저장하는 다른 테이블의 행으로 이동할 수 있습니다.

따라서 DbContextDbSet 을 다음과 같이 사용하고자합니다.

public class Document {
    public int Id { get; set; } // No need for [Key] ID is auto detected
    public string Name { get; set; }

    // Foreign Keys
    public int AuthorId { get; set; } // Can use "int?" if you want to allow it to be nullable
    public User Author { get; set; }
}

public class Author {
    public int Id { get; set; }
    public string Name { get; set; }
}

public class BookContext : DbContext {
    public DbSet<Author> Authors { get; set; }
    public DbSet<Document> Documents { get; set; }
}

그러면 테이블이 생성됩니다.

public class Document {
    public int Id { get; set; } // No need for [Key] ID is auto detected
    public string Name { get; set; }

    // Foreign Keys
    public int AuthorId { get; set; } // Can use "int?" if you want to allow it to be nullable
    public User Author { get; set; }
}

public class Author {
    public int Id { get; set; }
    public string Name { get; set; }
}

public class BookContext : DbContext {
    public DbSet<Author> Authors { get; set; }
    public DbSet<Document> Documents { get; set; }
}

DB를 질의 할 때 :

public class Document {
    public int Id { get; set; } // No need for [Key] ID is auto detected
    public string Name { get; set; }

    // Foreign Keys
    public int AuthorId { get; set; } // Can use "int?" if you want to allow it to be nullable
    public User Author { get; set; }
}

public class Author {
    public int Id { get; set; }
    public string Name { get; set; }
}

public class BookContext : DbContext {
    public DbSet<Author> Authors { get; set; }
    public DbSet<Document> Documents { get; set; }
}



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.