1

私は2つのクラスを持っています:

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

  public string DefaultText { get; set; }

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

public class Translation
{
    public string Language { get; set; }

    public string Text { get; set; }

    public MultilingualString Owner { get; set; }
}

ここで、次のスキーマを持つテーブル MultilingualStrings と Translations が必要です。

MultilingualString
  ID INT PK
  DefaultText NVARCHAR

Translations
  StringID PK, FK
  Language NCHAR(5) PK
  Text NVARCHAR

しかし、EF4/EF5 を使用してコードを最初にモデル マッピングを作成する方法がわかりません。このシナリオは EF で可能ですか?

4

1 に答える 1

2

完全な主キーをエンティティ クラスのプロパティとして公開する必要があるため、テーブルとエンティティ間のマッピングを作成することはできません。テーブルTranslationsには複合主キー ( StringID+ Language) がありますが、エンティティTranslationにはこのキーの一部 ( Language) しかプロパティとしてありません。

StringIDただし、マッピングにas プロパティを導入すると、次Translationのことが可能になります。

public class Translation
{
    public int StringId { get; set; }
    public string Language { get; set; }

    public string Text { get; set; }

    public MultilingualString Owner { get; set; }
}

Fluent API を使用したマッピング:

modelBuilder.Entity<Translation>()
    .HasKey(t => new { t.StringId, t.Language });

modelBuilder.Entity<Translation>()
    .Property(t => t.Language)
    .HasMaxLength(5)
    .IsFixedLength();

modelBuilder.Entity<Translation>()
    .HasRequired(t => t.Owner)
    .WithMany(m => m.Translations)
    .HasForeignKey(t => t.StringId);
于 2012-07-01T10:07:40.777 に答える