エンティティフレームワークの単一エンティティクラスに複数のテーブルをマッピングする -- c# フィールド と entity-framework フィールド と asp.net-mvc-3 フィールド と c#-4.0 フィールド と entity-framework-4.1 フィールド 関連 問題

mapping multiple tables to a single entity class in entity framework












29
vote

問題

日本語

これは重複してマークされる前に、他の関連記事をチェックし、彼らは私の質問に答えませんでした。

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

現在のタイプはこの

のように見えます <事前> <コード> 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を使用しています。

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

英語

Before this is marked as a duplicate, I have checked the other related posts and they do not answer my question.

I am working on a legacy database that has 2 tables that have a 1:1 relationship. Currently, I have one type (1Test:1Result) for each of these tables defined I would like to merge these particular tables into a single class.

The current types look like this

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

I would prefer them to look like this

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

I am currently using the fluent API for mapping these to our legacy Oracle database.

What would be the best method of combining these into a single class? Please note that this is a legacy database. Changing the tables is not an option and creating views is not a viable solution at this point in the project.

</div
              

回答リスト

39
 
vote
vote
ベストアンサー
 

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

<事前> <コード> 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"); });

これは便利です記事

 

You can use Entity Splitting to achieve this if you have the same primary key in both 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");       }); 

Here's a useful article

</div
 
 
     
     

関連する質問

27  子エンティティを削除する方法Entity Framework CFを使用して親がありますか?  ( How to delete child entities before parent with entity framework cf ) 
EFコードを最初に使用して、DBレコード( deleteMe )を削除し、それは子(<コード> deleteMe.Prices )です。 <事前> <コード> foreach (var deleteMe in deleteThese) { // De...

2  EF 4.1コードを1つのテーブルに1つのテーブルに2列マッピングするコード  ( Ef 4 1 code first mapping two columns in one table to list ) 
最初にEF 4.1コードのためにこの作品を作る方法を見つけています。私は周りを見回して見つけた似ている問題を見つけました。私のために働くようにそれがこの人のために答えられなかったように聞こえます。 これは、問題の2つのオブジェクトの簡易版です。 <事前> <コ...

3  reload()EFエンティティを更新しない  ( Reload not updating ef entity ) 
私は、既にコントローラに渡されたインスタンス化されたクラスモデルを取得する。とても便利です。 <事前> <コード> [HttpPost] public ActionResult DoTask(MyModel model) モデルは、そのIDとその他のプロパ...

1  EntityFramework生成クラス  ( Entityframework generated classes ) 
私はデータベースの最初の方法論を使用して生成したEFモデルを持っています。 Designerでは、DBContextオブジェクトを使用して「コード生成項目」を作成しました。これは、私のテーブル(私が欲しい)のPOCOクラスを生成したテンプレートを作成しました。...

3  EF 4.1:DBSetプロパティをDBContextに追加する必要がありますか?  ( Ef 4 1 do i need to add dbset properties to dbcontext ) 
主に、 DbContext.Set<>() メソッドを使用して、特定のエンティティに対して DbSet を取得し、私の専門化のDBSet自動プロパティを使用していません。 DBContextクラス 私はそれらを直接使用していない場合、私は実際にこれらの自動プロ...

0  キー属性列に値を持つレコードを追加する方法  ( How to add a record with a value to a key attribute column ) 
新しいレコードを追加するとき、key属性プロパティはそれがdbに値を保存しません。 さらなる調査では、それがまったくSQL文にはないことを示しました。 キー列に値を持つレコードを追加する方法は? 編集: これはテーブルです: <事前> <コード> Fi...

2  MVC3を使用した複雑なモデルへの更新を保存する  ( Saving updates to complex models with mvc3 ) 
複雑なモデルクラスを持っています。そのうち数列の列だけが(そして編集可能)編集されるべきです。これらの列を2つ開いて編集してフォームを保存すると、文字列列はちょうど元に戻されますが、他の(配列)列はNULLです。これはエンティティフレームワークに保存を解除しま...

0  SQL通知で最初にエンティティフレームワークコードを使用してください  ( Using entity framework code first with sql notification ) 
こんにちは私は2つのアプリケーションを持っています2つのアプリケーションがあります。データベースにデータベースを保存または更新している間、データベースへのデータを保存または更新すると、データ挿入、更新、削除、すべてを含むWCFサービスもあります。データベースへ...

1  EF4.1データが更新されていません(データベースに保存されません)  ( Ef4 1 data is not updating is not saved to database ) 
ユーザー評価を更新するための簡単な方法: <事前> <コード> public void PostScore(int userId, GlobalSettings gs, string name) { User user ...

26  EFコード最初のreadonly列  ( Ef code first readonly column ) 
最初にデータベースの最初のアプローチを使用してEFコードを使用しています。 「Database.SetInitializer(NULL); " マイテーブルには、CreatedateとAmenDDateの2列があります。それらはトリガを使用してSQL Serv...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有