2011-01-27 111 views
7

エンティティフレームワークでモデルを作成しようとしていますが、最初にコードを使用してモデルを作成しようとしています。エンティティフレームワークのコードファーストクラスの関係

私のデータベースには現在3つのテーブルがあります。ステータステーブルには、Webアプリケーション全体で使用されるすべてのステータスがあります。私はニューステーブルを持っています。そして、私はニュースステータステーブルを持っています。私がこれを好きにした理由は、ニュース項目にすべてのステータスを利用できないようにしたいからです。だから私の3つのテーブルは次のようになります。

ニュース表:

NewsId int required primary key 
Title varchar required 
Body varchar required 
NewsStatusId int required foreign key 

NewStatus表:

NewsStatusId int required primary key 
StatusId int required foreign key 

ステータス表

StatusId int required primary key 
Name varchar required 

このためのクラスを作成し、実行しますNews、Status、およびNewsStatusのクラスを作成する必要がありますか?私はニュースとステータスだけを考えていましたか?私の関係は2/3クラスの間でどのように見えますか?これらのクラスは2/3クラス間の関係でどのように見えるか

public class Status 
{ 
    public int StatusId { get; set; } 
    public string Name { get; set; } 
} 

マイニュースクラスは、この

public class News 
{ 
    public int NewsId { get; set; } 
    // rest of my properties 
    public int StatusId { get; set; } 
} 

ステータスクラスのように見えますか?

すべてのコードサンプルは高く評価されます。

答えて

6

:あなたのような何かを書くと思います。すべてのことは、コード慣行によって推論されます。つまり、要件に基づいて流暢なAPIを使用してDBスキーマをカスタマイズすることができます。

public class News 
{ 
    public int NewsId { get; set; } 
    public string Title { get; set; } 

    public ICollection<Status> Statuses { get; set; } 
} 

public class Status 
{ 
    public int StatusId { get; set; } 
    public string Name { get; set; } 

    public ICollection<News> Newses { get; set; } 
} 

public class Ctp5Context : DbContext 
{ 
    public DbSet<News> Newses { get; set; } 
    public DbSet<Status> Statuses { get; set; } 
} 

ニュースクラスの外部キーとしてNewsStatusIdがあるように行っていない。このような多くの団体に多くので、代わりに、NewsId外部キーは、そのリンクテーブルに表示されますのでご注意くださいニューステーブルのPKを参照します。 Newsクラスに実際にNewsStatusIdが必要な場合は、この関連付けを2対1の関連付けにする必要があります。つまり、2つではなく3つのエンティティを持つことになります。

+0

ありがとうございます。それでもNewsStatusテーブルが必要ですか?私は、NewsStatusテーブルからStatusテーブルとNewsテーブルへのリンクがどのように行われるのか分かりません。それとも私はここですべてそれを間違っている?テーブル構造はどのように見えるでしょうか? –

+1

はい、必要ですが、EFによって自動的に作成および管理されます。論理モデルには、NewsStatusのようなエンティティはありません。多対多リレーションシップのジョインテーブルには、リレーションシップの終端(つまり、リレーションシップ)からの* foreign *キーのみが含まれます。ステータステーブル、ニューステーブル)、または1対1の関連付けに分解して、ForeignStatusのような新しいエンティティを導入して、外部キーとその他の必要なプロパティを保持する必要があります。私の答えで示したコードは、最初の方法で行く。あなたが2番目の方法でそれを行う必要があるかどうか私に教えてください、そして、私はあなたにそれがどのように行われるかを教えます。 –

+0

私のオブジェクトモデルでは、NewsとStatusの関係はどうですか? 1〜M?これを完全に実装する方法に関するいくつかのコードがありますか?私はまだEFのコードの最初のアセンブリを使用していない、まともなチュートリアルはありますか?以下のCraigのコードサンプルでさえ私にとって初めてのものです。 –

1

ちょうどNewsおよびStatus。あなたは本当にニュースとステータス間の基本的な多対多の関連付けに任意の流暢APIを必要としません

modelBuilder.Entity<News>() 
    .HasMany(n => n.Statuses) 
    .WithMany(s => s.News); 

(お好みに合わせてpluralizationsを調整します。)

+0

modelBuilderとはそれ?私の更新された記事を見てください。ありがとう。 –

+0

このコードが3つのテーブルをリンクする方法はまだ分かりません。私のためのいくつかのコードや、あなたのコードを読んで読むためのリンクがありますか? –

関連する問題