1

私は、Entity Framework Coreを使用してPHPアプリケーションを.netコアアプリケーションに移行しています。Entity Framework Coreの翻訳可能なモデル

私のモデルの中には、translationsテーブルからリンクされたものがあります。モデルが翻訳にリンクされる方法は、modelnamemodelidです。 modelnameはクラスの名前であり、idはそのオブジェクトのIDです。オブジェクトには、ユニークなスラッグで複数の翻訳を行うことができます。
エンティティフレームワークを使用してこれを簡単に実装できるかどうか疑問に思っていました。したがって、モデルはIDでリンクされますが、独自のクラス名でフィルタリングされます。流暢なAPIでこのモデルを作成しなければならないのですか、それとももっと良い解決策がありますか?

以下は、データベースの外観の小さな例です。しかし、実際のデータベースでは、さらに多くのテーブルに翻訳があります。もちろん、データベースは必要に応じて変更することができます。

enter image description here

答えて

-1

私は、これは新しいテーブル、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から継承させ、Product/Store/Publisherがインスタンス化される条件を "model_name"フィールドに基づいて定義することができます。

私は完全にはわかりませんが、子クラスでは、これらのナビゲータプロパティを1つのタイプにのみ関連するものとして定義できます。ここで

は、ガイドです:

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を参照していることです。このタイプの継承はこれまでサポートされていません。 –

関連する問題