1

我有两节课:

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 回答