web-dev-qa-db-fra.com

mappage de plusieurs tables à une seule classe d'entité dans le cadre d'entité

Avant que cela ne soit marqué comme doublon, j'ai vérifié les autres messages associés et ils ne répondent pas à ma question.

Je travaille sur une base de données héritée qui a 2 tables qui ont une relation 1: 1. Actuellement, j'ai un type (1Test: 1Result) pour chacune de ces tables définies. Je voudrais fusionner ces tables particulières en une seule classe.

Les types actuels ressemblent à ceci

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; }
}

Je préférerais qu'ils ressemblent à ça

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; }
}

J'utilise actuellement l'API couramment pour les mapper à notre base de données Oracle héritée.

Quelle serait la meilleure méthode pour les combiner en une seule classe? Veuillez noter qu'il s'agit d'une ancienne base de données. La modification des tables n'est pas une option et la création de vues n'est pas une solution viable à ce stade du projet.

28
Chris McGrath

Vous pouvez utiliser le fractionnement d'entité pour y parvenir si vous avez la même clé primaire dans les deux tables.

  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");
      });

Voici un utile article

36
Eranga