1

Entity Framework Core를 사용하여 PHP 응용 프로그램을 .net 핵심 응용 프로그램으로 마이그레이션하고 있습니다.Entity Framework 코어를 포함한 번역 가능한 모델

내 모델 중 일부는 translations 테이블에서 링크 된 번역을 가지고 있습니다. 모델이 번역에 연결되는 방식은 modelnamemodelid입니다. modelname은 클래스의 이름이고 id는 해당 객체의 ID입니다. 개체에는 고유 한 슬러그가있는 여러 개의 번역이있을 수 있습니다.
이 엔티티 프레임 워크를 사용하여 쉽게 구현할 수 있는지 궁금합니다. 따라서 모델은 ID로 연결되지만 자체 클래스 이름으로 필터링됩니다. 유창한 API로 모든 모델에 대해이 관계를 만들어야합니까, 아니면 더 좋은 해결책이 있습니까?

아래는 데이터베이스가 어떻게 보이는지 보여주는 작은 예입니다. 그러나 실제 데이터베이스에는 번역이 더 많은 테이블이 있습니다. 데이터베이스는 물론 필요한 경우 수정할 수 있습니다.

enter image description here

답변

-1

I 이것이, Translatables을 새로운 테이블을 추가 해결하기 위해 사용되는 용액. 이제 번역 가능한 모든 테이블에는 translatable_id 필드가 있고 모든 번역은 Translatable에 연결됩니다.

0

당신이 TPC 전략의 다형성 연관을 달성 할 것으로 보인다. 여기

public class Context : DbContext 
{ 

    public Context() : base() 
    { 

    } 

    public IDbSet<Translation> Translations { get; set; } 

    public IDbSet<TranslatedModel> TranslationModels { get; set; } 

    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Store>().Map(m => 
      { 
       m.MapInheritedProperties(); 
       m.ToTable("Stores"); 
      }); 

     modelBuilder.Entity<Publisher>().Map(m => 
      { 
       m.MapInheritedProperties(); 
       m.ToTable("Publishers"); 
      }); 

     modelBuilder.Entity<Translation>() 
      .HasRequired(t => t.TranslatedModel) 
      .WithRequiredDependent(t => t.Translation); 
    } 
} 

public class Translation 
{ 
    public int Id { get; set; } 

    public string Value { get; set; } 

    public TranslatedModel TranslatedModel { get; set; } 
} 

public abstract class TranslatedModel 
{ 
    public int Id { get; set; } 

    public Translation Translation { get; set; } 
} 

public class Store : TranslatedModel 
{ 
    public int Website { get; set; } 

} 

public class Publisher : TranslatedModel 
{ 
    public string Website { get; set; } 
} 

문제 : 이것은 EF 6.0 작동하는 솔루션입니다 https://github.com/aspnet/EntityFrameworkCore/wiki/Roadmap

- TPC 및 기능을 지원하지 않습니다 EF 코어 2.0의

불행하게도 현재 버전은 2.1 EF 코어에 출시 될 예정이다 제품 및 상점에서 동일한 ID를 사용하여 충돌이 발생할 수 있습니다. 따라서 model_id 및 model_name을 참조 키로 사용하는 대신 ID 유형을 int에서 GUID로 변경하고 model_name을 삭제하는 것이 좋습니다. 여기

더 많은 정보는 :

https://weblogs.asp.net/manavi/inheritance-mapping-strategies-with-entity-framework-code-first-ctp5-part-3-table-per-concrete-type-tpc-and-choosing-strategy-guidelines

0

내가 EF 도움이 될 서비스를 않는다는 것을 알고 것은 EF 조건의 기반으로 다형성을 제공한다는 것입니다. "Translations"를 테이블 기반으로 사용하고 Product/Stores/Publishers가 Model에서 상속받으며 "model_name"필드를 기반으로 Product/Store/Publisher가 인스턴스화되는 조건을 정의하는 Model 클래스를 구현할 수 있습니다.

나는 완전히 확신 할 수 없지만 하위 클래스에서는 이러한 유형의 네비게이터 속성 만 정의 할 수 있습니다. 여기

는 가이드 :

https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/getting-started-with-ef-using-mvc/implementing-inheritance-with-the-entity-framework-in-an-asp-net-mvc-application

+0

문제는 그가 EF Core를 언급하고 있으며이 유형의 상속이 지금까지 지원되지 않는다는 것입니다. –