1

JobsとJobGroupsの2つのテーブルがあります。ジョブは次のようになります。

int Id  (PK)
varchar(30) Description
int GroupId  (FK)

JobGroupsは次のようになります

int Id  (PK)
varchar(30) GroupName

EFと流暢なAPIを使用してこれをマッピングすることを私が知っている唯一の方法は、次のクラスを定義することです。

public class Job
{
   public int Id {get; set;}
   public string Description {get; set;}
   public int GroupId {get; set;}
   public JobGroup Group {get; set;}

   //what I would rather see is this
   public string GroupName {get; set;}
}

public class JobGroup
{
   public int Id {get; set;}
   public string Name {get; set;}
}

modelBuilder.Entity<Job>().HasKey(j => j.Id).HasRequired(j => j.JobGroup).WithMany();

ただし、必要なのはJobGroup名だけです。JobGroupクラスを持たなくても、JobGroupsテーブルから名前を取得する方法はありますか?Job IdがJobGroupsテーブルに存在しないことを除いて、エンティティ分割とほとんど同じです。

ご協力いただきありがとうございます。

4

1 に答える 1

0

いいえ-エンティティフレームワークはエンティティと連携し、エンティティをマッピングする必要があります-マッピングは、データベースにクエリを実行するSQLを生成する方法をEFに指示します。マップされていないテーブルから列を取得する場合は、独自のSQLを作成する必要があります。

代わりにJob直接マッピングする場合は、データベースビューを作成する必要があります。これは、そのようなマッピングの結果がエンティティではないためです。これはプロジェクションであり、EFコードで最初に使用できるマップされたプロジェクションはデータベースビューのみです。このような投影は、EFがバックを取得して正しく永続化する方法を知らないため(ビューがどのようにそれを作成したかを知らないため)にも読み取られます。JobGroup.NameJobGroupIdIdJobGroupJob

于 2012-07-12T19:55:55.177 に答える