2012-07-24 161 views
0

來源:MVC EF數據庫第一和SQL多對多的關係

DictionaryTable: 

DictID  int 
RUWordID int -> FK to RUWordsTable.RUWordID 
ENWordID int -> FK to ENWordsTable.ENWordID 

RUWordTable: 

RUWordID int 
Word  string 

ENWordTable: 

ENWordID int 
Word  string 

我希望能夠讀/寫數據表中採用以下結構:

RUWord ENWord 
Привет Hello 
... 

什麼而言是最好的選擇的速度和簡單的數據訪問從MVC視圖做我想做的事情。根據我的理解,可以選擇創建SQL視圖並使用它(但不確定可能的INSERT數據)。或者只是創建相同的,但在Visual Studio設計器中使用實體框架。 基本上,一個單詞可以不同的轉換(在其他表中有幾個條目)。我的目標是找到一種方法,如何使用自動插入將詞添加到字典中(當找不到源或翻譯時將其添加到參考表中,如果找到 - 只使用現有條目)

回答

1

它很大程度上取決於您需要的數據量閱讀一次。如果你想查詢一個或幾個詞的翻譯,一個實體框架模型將做一個完美的工作。如果您需要獲取海量數據,視圖或存儲過程會更好。但我不期望後者發生。在MVC視圖中,您可能會使用分頁。

至於插入數據EF將是一個可行的選擇。您已經定義了一個聯結表(DictionaryTable)。你可以建立EF的方式,結合表是透明的:

class RuWord 
{ 
    public int Id { get; set; } 
    public string Word { get; set; } 
    public ICollection<EnWord> EnWords { get; set; } 
} 

class EnWord 
{ 
    public int Id { get; set; } 
    public string Word { get; set; } 
    public ICollection<RuWord> RuWords { get; set; } 
} 

(假設你的工作代碼優先)

在數據輸入,你可以添加一個新的俄語單詞給RussianWords DbSet並將新的或現有的英文單詞添加到單詞的EnWords收藏中,並致電SaveChanges()。 EF將在聯結表中插入文字合適的記錄(將外鍵作爲其複合主鍵)。

但是......在現實生活中,我幾乎沒有見過一個純粹的結合表。我帶這個是因爲在你的情況下,我很難想象只註冊俄語和英語單詞之間的關聯就足夠了。你是否(至少)需要某種程度的偏好?就像還有更多的「日期」這個詞的翻譯,但首選的是日曆事物(除非你正在爲約會網站工作,但即使如此...)。無論如何,如果有什麼你想記錄關聯你需要明確映射聯合表和創建關聯記錄將他們在代碼中的所有細節。

我希望這給出了一些方向。


編輯(您的評論之後)

如果使用(即與接線表對應,即一類)的明確結實體。該實體可以具有EnWordRuWord這兩個屬性作爲對上述兩個表格的引用。數據輸入意味着創建一個新的DictionaryTable實例並設置其屬性(可以是新的或現有的單詞)。

+0

謝謝阿諾德,我會與此一起玩。但另一個問題,我使用數據庫的第一種方法,並試圖找出如何將一個實體映射到Visual Studio Designer中的兩個表(打開edmx文件時)。創建主要目標是使用db context(如_db.MyCustomEntity)讀取/寫入數據庫。RuWord(這應該是第一列)和_db.MyCustomEntity.EnWord(這應該是第二個) – 2012-07-26 10:27:14

+0

嗨,看看我的編輯。 edmx是否已經包含一個DictionaryTable實體? – 2012-07-26 17:41:23

+0

不,它不是。它是數據庫中的純粹結點表。所以EF不會爲這些表創建實體。 RuWords和EnWords表之間只有多對多的關係。但是我的想法是相反的 - 在Visual Studio EF設計器中只有一個實體,並且它應該是我上面提到的結構 – 2012-07-29 16:31:06