2

私は Entity Framework を使い始めたばかりで、何か誤解しているようです。基本的に、データベースはすでにセットアップされています。以下が私のテーブルだとしましょう。

**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 Code First では、すべてのテーブルのクラスを作成する必要がありますか? そうでない場合、同等の LEFT OUTER Join をどのように作成しますか? 私が見つけたすべての例では、ナビゲーション プロパティを使用して、テーブルからテーブルへ (つまり、クラスからクラスへ) 移動しています。

4

1 に答える 1

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が返されます)、次に、指定したすべてのプロパティを持つタイプが作成されます。姓が必要な場合は、次のコマンドでアクセスします。

string lastName = query.LastName;

于 2012-05-09T17:46:00.860 に答える