好的,这是一个有趣且最重要的 真正紧迫的问题 需要我解决...为了让其他人能够清楚地理解它,我已经努力制作了一个带有插图的帖子。
对象模型
所以我想到了这个简单、容易和“美丽”的模型。看第一张图。 (您可以忽略 PathEntry
,它与我的情况无关。)
这个想法是 MediaFeedItem
拥有:
ThumbnailFileEntries
的集合(可通过 ThumbnailFiles 属性访问) FileEntry
(元数据文件属性)和 MediaFileEntry
(MediaFile 属性) 我们将这最后三种实体类型称为文件实体。
现在还有更多:正如您所看到的,我从
ThumbnailFileEntry
和 继承了 MediaFileEntry
和 FileEntry
,我们不要争论这个! (就目前而言),它是设计的故事结尾方面之一,两种实体类型将在以后继续增长。这已经给我带来了一些关于由文件实体到
MediaFeedItem
的关系引起的多态关联的重要问题。您应该观察到的第一件事是,我已将导航属性从 派生的 文件实体(
ThumbnailFileEntry
和 MediaFileEntry
)消除到主要实体 MediaFeedItem
。我这样做是因为他们已经继承了基类
FileEntry
中定义的那个属性。如您所见,我没有删除这些关联末尾的角色。关系模型
我将使用如此广泛的概念上优越的 TPT 策略来生成我的对象模型并将其映射到 RDB 世界(vs TPH/TPC)。
我正在使用 EF5-rc、EDMX 模型设计器来设计我的模型,并使用 EF5 DbContext Generator 来生成 DbContext 和 POCO,因为我想使用 DbContext API。
如您所见,我可以使用 EF 工具很好地生成数据库模型:
问题
加载新的 MediaFeedItem 并保存时,出现以下错误:
System.InvalidOperationException:违反多重约束。关系“MediaFeedModel.MediaFeedItem_MetadataFile”的角色“MetadataFile”具有多重性1或0..1。
我究竟做错了什么?
最佳答案
看看你的问题,一件事很突出,文件和 MediaFeedItem 之间的 FK 关系是必需的(即文件必须有一个 MediaFeedItem),但在你使用文件的扩展版本的情况下,你可能不想要这个。
我认为你想要做的是以下之一:
我个人认为第二个是解决您的问题的更优雅的解决方案,因为它为您的 MetadataFile 创建了一个实际类型
似乎正在发生的事情是您正在尝试创建扩展类型,但基本类型实际上不是元数据文件。
关于c# - Entity Framework 上的多态交叉关联,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11270620/