2012-05-09 5 views
2

私はEntity Frameworkを使い始めています。私は何かを誤解しているようです。基本的に私は既にデータベースをセットアップしています。私のテーブルが次のようなものだとしましょう。EFコード最初の複数のテーブルを単一のエンティティ

**Employees** 
EmployeeId 
CubeId (FK to Cubes table) 
NameId (FK to Name table) 

**Cubes** 
CubeId 
CubeName 

**Person** 
NameId 
FirstName 
LastName 

SELECT EmployeeId, CubeId, CubeName, FirstName, LastName FROM Employees LEFT OUTER JOIN Cubes LEFT OUTER JOIN Personのように書くことができます。それは従業員全員を返すでしょう。基本的には、EFコードでまずEVERYテーブル用のクラスを作成する必要がありますか?そうでない場合は、どのようにLEFT OUTER結合を作成しますか?私が見つけたすべての例は、ナビゲーションプロパティを使用してテーブルからテーブル(つまりクラスからクラス)に移動します。

答えて

3

モデル:

public class Employee 
{ 
    [Key] 
    public int EmployeeId {get;set;} 
    public int CubeId {get;set;} 
    [ForeignKey("Cube")] 
    public int NameId {get;set;} 
    [ForeignKey("Name")] 

    public virtual Cube Cube {get;set;} 
    public virtual Name Name {get;set;} 
} 

public class Cube 
{ 
    [Key] 
    public int CubeId {get;set;} 
    public string CubeName {get;set;} 
} 

public class Name 
{ 
    [Key] 
    public int NameId {get;set} 

    public string FirstName {get;set;} 
    public string LastName {get;set;} 
} 

あなたのコンテキスト:

public class YourContext:DbContext 
{ 
    public DbSet<Name> Names {get;set;} 
    public DbSet<Cube> Cubes {get;set;} 
    public DbSet<Employee> Employees {get;set;} 
} 

あなたのクエリ:

YourContext db = new YourContext(); 
var query = db.Employees.Where(x => x.EmployeeId == id).Select(x => new 
{ 
    EmployeeId = x.EmployeeId, 
    CubeId = x.Cube.CubeId, 
    CubeName = x.Cube.CubeName, 
    FirstName = x.Name.FirstName, 
    LastName = x.Name.LastName 
}).FirstOrDefault(); 

これは、いくつかのIDを持つ最初の従業員を検索します(または何もありません場合はnullを返す)しますあなたが言及したすべてのプロパティを持つ型を作成します。姓が必要な場合は、次のURLでアクセスします。

string lastName = query.LastName;

+0

だから、あなたは、すべてのテーブルのモデルを作る必要があると言っていますか?そうであれば、既に存在するデータベースに対してCode Firstを使用する点は何ですか?あなたはメタデータを使ってそれを抽出することができます。 – Dan

+0

名前「コードファースト」はそれをすべて表しています。目標はコードを最初に書く手段を提供することで、コードはデータベースを構築します。すでにデータベースがある場合は、データベースをソリューションに追加し、TTを使用してPOCOクラスを生成します(NuGetで取得できます)。コードファーストは、データに損害を与える可能性のある変更でなければ、コード内からデータベースを変更する利点をもたらします。 –

+0

Entity Framework Power Toolsをダウンロードする場合は、Visual Studioで右クリックしてリバースエンジニアのコードを作成することもできます。 –

関連する問題