实体框架 - 继承

时间:2012-08-12 07:27:06

标签: entity-framework-4.1

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

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

我对新闻类别和新闻使用TPH继承。我的数据库中有一个TYPE字段。如果type = 1表示News(在内容表中),如果type = 1则表示(在NewsCategory表中)。

类别和cntent有很多关系!

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

当我添加新闻时,它需要categoryId,我可以使用1,2或其他Id!

如果我想在新闻和新闻类别以及类别和内容之间创建多对多的关系。我希望新闻不知道有关内容及其关系的任何事情

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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,因为新闻继承自内容,而不是类别你的意思是TypeId吗?