web-dev-qa-db-ja.com

エンティティフレームワークの複数のテーブルを単一のエンティティクラスにマッピングする

これが重複としてマークされる前に、他の関連する投稿を確認しましたが、彼らは私の質問に答えません。

1:1の関係を持つ2つのテーブルを持つレガシーデータベースに取り組んでいます。現在、これらのテーブルごとに1つのタイプ(1Test:1Result)が定義されています。これらの特定のテーブルを1つのクラスにマージしたいと思います。

現在のタイプはこのようになります

public class Result 
{
    public          string      Id                  { get; set; }
    public          string      Name                { get; set; }
    public          string      Text                { get; set; }
    public          string      Units               { get; set; }
    public          bool        OutOfRange          { get; set; }
    public          string      Status              { get; set; }
    public          string      Minimum             { get; set; }
    public          string      Maximum             { get; set; }

    public virtual  Instrument  InstrumentUsed      { get; set; }

    public virtual  Test        ForTest             { get; set; }
}


public class Test
{
    public          int     Id            { get; set; }
    public          string  Status        { get; set; }
    public          string  Analysis      { get; set; }
    public          string  ComponentList { get; set; }
    public virtual  Sample  ForSample     { get; set; }
    public virtual  Result  TestResult    { get; set; }
}

私は彼らがこのように見えることを望みます

public class TestResult
{
    public          int        Id              { get; set; }
    public          string     Status          { get; set; }
    public          string     Analysis        { get; set; }
    public          string     ComponentList   { get; set; }
    public          string     TestName        { get; set; }
    public          string     Text            { get; set; }
    public          string     Units           { get; set; }
    public          bool       OutOfRange      { get; set; }
    public          string     Status          { get; set; }
    public          string     Minimum         { get; set; }
    public          string     Maximum         { get; set; }

    public virtual  Instrument InstrumentUsed { get; set; }
}

私は現在、これらを従来のOracleデータベースにマッピングするためにFluent APIを使用しています。

これらを単一のクラスに組み合わせる最良の方法は何でしょうか?これはレガシーデータベースであることに注意してください。テーブルの変更はオプションではなく、ビューを作成することは、プロジェクトのこの時点で実行可能な解決策ではありません。

28
Chris McGrath

両方のテーブルに同じ主キーがある場合は、エンティティ分割を使用してこれを実現できます。

  modelBuilder.Entity<TestResult>()
    .Map(m =>
      {
        m.Properties(t => new { t.Name, t.Text, t.Units /*other props*/ });
        m.ToTable("Result");
      })
    .Map(m =>
      {
        m.Properties(t => new { t.Status, t.Analysis /*other props*/});
        m.ToTable("Test");
      });

これが便利です 記事

36
Eranga