2012-08-12 123 views
1

我也有類似的實體框架模型:實體框架 - 繼承

Category 
Content 
NewsCategory (Inherits Category) 
News (Inherits Content) 

我用TPH繼承兩個新聞分類和新聞。我的數據庫中有一個TYPE字段。如果type = 1意味着News(在內容表中),並且如果type = 1意味着(在NewsCategory表中)。

category和cntent有多對多的關係!

但是當我想添加新聞時,我怎樣才能防止添加其他類型的消息?

當我添加一個新聞它希望categoryId,我可以使用1,2或其他ID!

如果其實我想在新聞和新聞類別以及類別和內容之間創建多對多的關係。並且我想要消息不知道關於內容和它的關係的任何東西

回答

0

數據庫不理解TPH繼承的含義 - 它在類別和內容表之間具有多對多關聯,並且它確實允許在任何類別之間創建關係和內容。您無法在數據庫級別的TPH中避免它,但是在實體級別上,只應在派生類型中具有導航屬性,以便在應用程序級別處理它應該是直接的。

+0

感謝的世界。在我的情況下,內容和類別都有TYPE。例如:內容類型可以是新聞,類別類型可以是新聞。我如何添加新聞並阻止添加其他類別的新聞? – 2012-08-14 11:10:49

0

我傾向於定義枚舉以伴隨我定義的繼承類。

public enum CategoryType 
{ 
    News = 1, 
    Photography, 
    PopularMusic 
} 

public enum ContentType 
{ 
    Article = 1, 
    Image, 
    Video 
} 

你的兩個表可以有一個TypeId,所以當你的代碼寫入一個新聞項。

Category.TypeId = (int)CategoryType.News; 

Content.TypeId = (int)ContentType.Article; 

你不能避免要做到這一點的代碼,但它應該是更清晰,不易出錯,只是在TYPEID拋出一個int值備案。

在你的情況下,我不確定你的關係,例如類型字段的位置(我假設有一個在類別中,另一個在內容中)。當你在你的問題中寫下type=1 means (in NewCategory table)時,你似乎錯過了某些東西。

我不確定爲什麼在添加新聞時需要添加categoryId,因爲新聞是從Content繼承而來的,而不是您的意思是TypeId?

+0

感謝的世界。我的案例新聞類別和新聞有m-m關係,文章和文章類別有m-m關係。 – 2012-08-18 05:39:50