복붙노트

[SQL] 나는 4.3 코드 첫 번째 엔티티 프레임 워크의 기본 스키마 이름을 변경할 수 있습니까?

SQL

나는 4.3 코드 첫 번째 엔티티 프레임 워크의 기본 스키마 이름을 변경할 수 있습니까?

현재 내가 공유 호스팅 환경 및 코드 첫 번째 마이그레이션에 내 응용 프로그램을 배포하고 하나의 사소한의 딸꾹질을 제외하고 좋은 일하고있다. 매번 난 내가 기본적으로 공유 호스트가 같은 이름으로하는 기본 스키마 이름을 만들기 때문에 [DBO]와 모든 테이블 이름 앞에 추가해야하기 때문에 옵션 "-script 업데이트 - 데이터베이스의"를 사용할 필요가 사이트를 푸시 할 데이터베이스 사용자 이름.

내 공유 호스트에 로그인하여 데이터베이스를 작성하는 경우, 그때 사용자를 만들어야합니다. 내가 그 사용자 관리자의 이름을 경우이 같은 관리자 보면 뭔가로 로그인 한 다음 테이블 코드 처음 만들어 "[관리자]. [블로그 게시물]". 응용 프로그램이 테이블이 만들어진 모든 실행하지만, 그것이 말하는 때문에 내가 EF 예외를 얻을 "[dbo가]. [블로그 게시물]"때 유효하지 않습니다. 나는 "[DBO]"대신 "[관리자]"의 수정을하는 테이블의 스키마 이름을 이름을 변경합니다.

주위를 얻으려면이 나는 스크립트뿐만 아니라 자신의 스키마와 자신의 이름을 자신의 이름으로 테이블을 참조하기 때문에 모든 테이블 이름 앞에 "[DBO]의"마이그레이션 스크립트를 수동으로 실행하기 위해 생성하고 추가해야합니다.

이 문제를 해결하기 위해 쉬운 방법이 있나요? 모든 I 응용 프로그램 및 모든 단지 일을 게시했다해야 할 일을했을 경우는 좋은 있도록 할 것이다. 이 스키마 이름 불일치 아니었다면 그것은 한 번의 클릭으로 배포 될 것이며, 모든 영광이 될 것입니다.

해결법

  1. ==============================

    1.당신은 스키마 이름을 지정 ToTable 방법을 사용할 수 있습니다. 당신은 스키마 이름, 컨벤션 사용 DBO에 의해 EF의 의지를 지정하지 않은 경우.

    당신은 스키마 이름을 지정 ToTable 방법을 사용할 수 있습니다. 당신은 스키마 이름, 컨벤션 사용 DBO에 의해 EF의 의지를 지정하지 않은 경우.

    public class MyContext
    {
        private string schemaName = "Foo";
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
             modelBuilder.Entity<MyEntity>().ToTable("MyTable", schemaName);
        } 
    }
    
  2. ==============================

    2.엔티티 프레임 워크 (6)를 사용하는 경우, 바로 HasDefaultSchema 방법을 사용 :

    엔티티 프레임 워크 (6)를 사용하는 경우, 바로 HasDefaultSchema 방법을 사용 :

    public class Contexto : DbContext
    {
        public DbSet<User> Users { get; set; }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.HasDefaultSchema("MyDefaultDbSchema");
        }
    }
    
  3. ==============================

    3.데이터베이스 첫번째 구현을 위해, 쉬운. edmx 파일을 마우스 오른쪽 클릭 -> 속성을 ​​열고 기본 데이터베이스 스키마를 설정합니다.

    데이터베이스 첫번째 구현을 위해, 쉬운. edmx 파일을 마우스 오른쪽 클릭 -> 속성을 ​​열고 기본 데이터베이스 스키마를 설정합니다.

    첫 번째 코드이 문서는 가장 유망한 것으로 보인다. http://devproconnections.com/entity-framework/working-schema-names-entity-framework-code-first-design

  4. ==============================

    4.EF 코드에서 첫째, 기본적으로 모든 것이 SQL Server의 관리 액세스 "DBO-스키마"에 대한 사용자 액세스를 기반으로 설정됩니다. 특정 사용자가 공유 호스팅에 공통 데이터베이스와 작업에 정의 된 경우, 그때 더 이상 DBO 관리 액세스가 없을 것입니다. 이 시간 우리 테이블의 이름은 dbo.tableName, 예를 들어, someUser.tableName는,이 시점의 부정확성이 불가능 프로그램을 실행 할 수 있습니다. 수정 및 명시 적으로 데이터베이스에 연결된 사용자를 할당합니다. 메타 데이터를 사용하는 경우, 다음과 같은 방법이 사용되어야한다 :

    EF 코드에서 첫째, 기본적으로 모든 것이 SQL Server의 관리 액세스 "DBO-스키마"에 대한 사용자 액세스를 기반으로 설정됩니다. 특정 사용자가 공유 호스팅에 공통 데이터베이스와 작업에 정의 된 경우, 그때 더 이상 DBO 관리 액세스가 없을 것입니다. 이 시간 우리 테이블의 이름은 dbo.tableName, 예를 들어, someUser.tableName는,이 시점의 부정확성이 불가능 프로그램을 실행 할 수 있습니다. 수정 및 명시 적으로 데이터베이스에 연결된 사용자를 할당합니다. 메타 데이터를 사용하는 경우, 다음과 같은 방법이 사용되어야한다 :

    [Table("MyTableName", Schema="MySchemaName")]
    public class MyClassName
    {
     //Other Lines...
    }
    

    또는 (되는지 여부 유창함 API는 다음과 같은 사용자 정의 할 수 있습니다 :

    modelBuilder.Entity<Blog>().ToTable("MyTableName", schemaName:"MySchemaName");
    

    다음을 주목하라 :

    연구를위한 좋은 참조 : http://www.c-sharpcorner.com/article/fluent-api-in-code-first-approach/

  5. ==============================

    5.이 C #을 위해, 내가 VB은 아래를 작성한 때문에 내가 추가하고 싶습니다

    이 C #을 위해, 내가 VB은 아래를 작성한 때문에 내가 추가하고 싶습니다

    Public Class ClientDbContext
    Inherits DbContext
    Public Property Clients As DbSet(Of Client)
    
    Protected Overrides Sub OnModelCreating(modelBuilder As DbModelBuilder)
        modelBuilder.HasDefaultSchema("dbo")
    End Sub
    End Class
    
  6. from https://stackoverflow.com/questions/9562883/can-i-change-the-default-schema-name-in-entity-framework-4-3-code-first by cc-by-sa and MIT license