Entity Framework Code First Fluent API로 테이블 이름을 지정하는 방법


86

Entity가 있고 다른 이름의 데이터베이스 테이블에 매핑하도록 Entity Framework를 구성합니다.

Code First DataAnnotations ( DataAnnotations.Schema.TableAttribute )를 사용 하면이 작업을 쉽게 수행 할 수 있습니다 .

그러나 제한으로 인해 이제는 Code First Fluent API 를 사용해야 합니다 (내 도메인 개체는 외부 클라이언트에서 사용되므로 기술에 한정되지 않아야합니다 (예 : DataAnnotations에 대한 참조가 있어야 함).)

MSDN에서 검색했지만 아무것도 찾지 못했습니다. 그래서 가능하고 어떻게?

감사합니다.


일반적으로 DTO (데이터 전송 개체)를 만들고 EF 개체를 여기에 매핑해야합니다. 작거나 사소한 앱에서 작업하지 않는 한 EF 클래스를 직접 사용해서는 안됩니다.
reggaeguitar

답변:


96

다음 .ToTable()방법을 사용합니다 .

modelBuilder.Entity<Department>().ToTable("t_Department");   

출처 : MSDN : http://msdn.microsoft.com/en-us/data/jj591617.aspx


1
내가 한 곳에서 anotations 원하기 때문에 나는이 선호
rajeemcariazo

테이블이 존재한다는 확인이 있습니까? 테이블의 이름을 변경했는데 아무런 문제가 없었습니다. 이것이 예상했던 동작입니까? ... 그것은 분명히 이름이 바뀐 테이블에 CRUD를 할 수는 없지만, 다 치신하지 않는 것
AZ 차드에게

220

테이블 주석을 사용할 수도 있습니다.

[Table("InternalBlogs")]
public class Blog

참조 : Code First 데이터 주석


6
들으,하지만 당신은 신중하게 내 질문을 읽으면 - 직접 : 그것의 중간에 그 apptoach를 볼 수 있습니다
bairog

2
주석의 이름이 "Table"인 경우에도 테이블뿐 아니라 뷰에서도 제대로 작동하는 것으로 보입니다.
Jon Schneider

@JonSchneider 나는 특별한 이유없이 여기에서 정의를 주장하고 있지만 뷰는 읽기 전용 테이블입니다.
Erik Bergstedt 2015 년

테이블 주석은 System.ComponentModel.DataAnnotations.Schema;에 있습니다.
Pétur Ingi Egilsson

이 더 upvotes을 가지고 어떻게, 문제는 명확하게 유창 API 버전을 요청
Worthy7

7

ToTable 방법 사용 :

public class MyEntityMap : EntityTypeConfiguration<MyEntity>
{
    public const string TableName = "MyEntity";

    public MyEntityMap()
    {                   
        ToTable(TableName);

        Property(t => t.Id);
    }
}

1
매핑을 클래스로 나누는 것이 가장 깨끗한 방법이라고 생각합니다.
SventoryMang

1
그러나 당신의 OnModelCreating방법에서 당신은해야합니다 : modelBuilder.Configurations.Add(new MyEntityMap());대신에 그냥 modelBuilder.Entity<MyEntity>().ToTable("MyEntityTable");그렇게 아니오를 추가 할 수있는 곳 에서이 엔티티에 대해 할 다른 매핑이 없다면 이것은 더 깨끗한 방법이 아닙니다.
Serj Sagan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.