我的实体框架模型类似于:
Category
Content
NewsCategory (Inherits Category)
News ( Inherits Content)
我对新闻类别和新闻使用TPH继承。我的数据库中有一个TYPE字段。如果type = 1表示News(在内容表中),如果type = 1则表示(在NewsCategory表中)。
类别和cntent有很多关系!
但是当我想添加新闻时如何阻止添加其他类型的新闻?
当我添加新闻时,它需要categoryId,我可以使用1,2或其他Id!
#如果我想在新闻和新闻类别以及类别和内容之间创建多对多的关系。我希望新闻不知道有关内容及其关系的任何事情
答案 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吗?