2011-01-27 78 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類之間會是什麼樣子?

我的新聞類看起來像這樣

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

狀態類:

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

將這些類會是什麼樣的2/3類之間的關係?

任何代碼示例將不勝感激。

回答

6

你並不真正需要的新聞和狀態之間的基本許多-to-many關聯的任何流暢的API。一切都將由Code First根據約定推斷。也就是說,我們可以根據您的要求使用流暢的API來定製您的數據庫模式。

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。如果您確實需要在新聞課程上有NewsStatusId,那麼我們必須將此關聯分爲2個一對多關聯,這意味着我們最終擁有3個實體而不是2個。

1

只是NewsStatus。你會寫類似:

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

(調整複數形式的根據自己的喜好。)

+0

什麼是modelBuilder,我會在哪裏放置它?看到我更新的帖子。謝謝。 – 2011-01-27 13:29:25

+0

我仍然不明白這段代碼如何連接我的3個表格?你有更多的代碼或鏈接去閱讀你的代碼嗎? – 2011-01-27 13:54:36

相關問題