1

我有类似于以下的实体框架模型:

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

我将 TPH 继承用于 newscategory 和 news 。我的数据库中有一个 TYPE 字段。如果 type=1 表示新闻(在内容表中),如果 type=1 表示(在 NewsCategory 表中)。

类别和内容有多对多的关系!

但是当我想添加新闻时,如何防止添加其他类型的新闻?

当我添加一个需要 categoryId 的新闻时,我可以使用 1,2 或其他 ID!

#

如果事实上我想在新闻和新闻类别以及类别和内容之间创建多对多的关系。我希望新闻对内容及其关系一无所知

4

2 回答 2

0

数据库不理解 TPH 继承的含义 - 它在类别和内容表之间具有多对多关联,并且确实允许在任何类别和内容之间创建关系。您无法在数据库级别的 TPH 中避免它,但在实体级别,您应该仅在派生类型中具有导航属性,因此在应用程序级别处理它应该是直截了当的。

于 2012-08-12T07:46:06.200 回答
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 字段在哪里(我假设 Category 中有一个,Content 中也有一个)。type=1 means ( in NewCategory table)当你写你的问题时,你似乎错过了一些东西。

我不确定为什么在添加新闻时需要添加 categoryId,因为新闻继承自 Content 而不是 Category,您的意思是 TypeId 吗?

于 2012-08-12T07:57:45.803 回答