3

은 다음과 같습니다 것을 내가 (여러 설립 마이그레이션과) 기존 코드 제 1 개체가 말) :어떻게 기존 엔티티를 다른 C# 네임 스페이스로 옮기고 마이그레이션을 유지할 수 있습니까? (그러나 데이터베이스 테이블의 의미에서</p> <pre><code>namespace OldNamespace { [Table("Widget", Schema = "summat")] public class Widget { } } </code></pre> <p>그리고 C#을 의미에서 <code>NewNamespace</code>로 이동하려면 :

namespace NewNamespace 
{ 
    [Table("Widget", Schema = "summat")] 
    public class Widget 
    { 
    } 
} 

엔티티의 전체 C#을 네임 스페이스를 포함, 그래서 EF 오래된/기존 네임 스페이스 마이그레이션 후가 될 것입니다 무엇을 알 수 있다는 문제가 보인다 생성 된 모델 스냅 샷?

protected override void BuildModel(ModelBuilder modelBuilder) 
    { 
      //... 
      modelBuilder.Entity("OldNamespace.Widget", b => 
      { 
      } 
    } 

아무도 이런 종류의 일을 했습니까? 모든 마이그레이션을 "스쿼시"하지 않고 리팩터링을 수행하려면 어떻게해야합니까? EF가 네임 스페이스 리팩터를 따라갈 수 있도록 메타 데이터를 설정하는 방법이 있습니까?

EF 코어 버전 : 1.0.1

업데이트 : 새로운 EF 핵심 마이그레이션은 다음과 같습니다가 :

enter image description here

답변

1

을 재현 할 수 없었다. 모델 폴더에

추가 된 위젯의 실체 :

namespace WebApplication1.Models 
{ 
    [Table("Widget", Schema = "summat")] 
    public class Widget 
    { 
     [Key] 
     public int Id { get; set; } 

     public string Name { get; set; } 
    } 
} 

마이그레이션을 만들었습니다.(dotnet ef migrations add AddWidget)이있어 :

protected override void Up(MigrationBuilder migrationBuilder) 
     { 
      migrationBuilder.EnsureSchema(
       name: "summat"); 

      migrationBuilder.CreateTable(
       name: "Widget", 
       schema: "summat", 
       columns: table => new 
       { 
        Id = table.Column<int>(nullable: false) 
         .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn), 
        Name = table.Column<string>(nullable: true) 
       }, 
       constraints: table => 
       { 
        table.PrimaryKey("PK_Widget", x => x.Id); 
       }); 
     } 

는 Domain.Entities 폴더에 개체를 이동했다.

namespace WebApplication1.Domain.Entities 
{ 
    [Table("Widget", Schema = "summat")] 
    public class Widget 
    { 
     [Key] 
     public int Id { get; set; } 

     public string Name { get; set; } 
    } 
} 

추가 된 또 다른 마이그레이션 :dotnet ef migrations add MoveWidget. 있어이 :

protected override void Up(MigrationBuilder migrationBuilder) 
{ 
} 
+0

사전 리팩터 마이그레이션의 네임 스페이스를 변경 했습니까? 아니면 그냥 내버려둬? – el2iot2

+0

또한 마이그레이션/업데이트를 실행할 수 있습니까? 마이그레이션 코드 생성은 한 가지 사항이지만 마이그레이션 프로세스를 성공적으로 계속 진행하는 것은 기존 데이터 상황에 마이그레이션을 적용하는 것과 마찬가지입니다. – el2iot2

+0

@automatonic, 아니에요. 그냥 내버려둬. 데이터베이스 업데이트 명령을 성공적으로 실행할 수있었습니다. 원하는 경우 솔루션을 github repo에 업로드하여 문제를 재생하려고 시도 할 수 있습니다. 바로 알려주세요. –

2

엔티티의 전체 C#을 네임 스페이스를 포함, 그래서 EF 오래된/기존 네임 스페이스 마이그레이션 후가 될 것입니다 무엇을 알 수 있다는 문제가 보인다 생성 된 모델 스냅 샷?

이것은 문제가되지 않습니다. 결국 이들은 디자인 타임에 사용되는 불투명 한 문자열입니다. 이전 네임 스페이스 이름과 같은 사실은 부적절합니다.

+0

공식 체중 재량에 감사드립니다. C# 네임 스페이스가 중요하다는 것이 내 머리 속에 왜 있었는지 확실하지 않지만 링이 주장하는 것을 테스트/테스트 한 후에는 사실입니다. 편집증은 깊고 모든 것을 망칩니다. – el2iot2