c# – 实体框架上的多态交叉关联

c# – 实体框架上的多态交叉关联,第1张

概述好吧,这对我来说是一个有趣且最重要的真正迫切需要解决的问题……为了让其他人能够理解它,我已经伸展自己做了一个插图很好的帖子. 对象模型 所以我想到了这个简单,容易和“漂亮”的模型.看第一张照片. (你可以忽略PathEntry,它与我的情况无关.) 想法是MediaFeedItem拥有: > ThumbnailFileEntries的集合(可通过ThumbnailFiles属性访问) >最多1个原 好吧,这对我来说是一个有趣且最重要的真正迫切需要解决的问题……为了让其他人能够理解它,我已经伸展自己做了一个插图很好的帖子.

对象模型

所以我想到了这个简单,容易和“漂亮”的模型.看第一张照片. (你可以忽略PathEntry,它与我的情况无关.)

想法是MediaFeedItem拥有:

> thumbnailfileEntrIEs的集合(可通过thumbnailfiles属性访问)
>最多1个原始fileEntry(Metadatafile属性)和
>最多1个MediafileEntry(Mediafile属性)

我们将这最后三种实体类型称为文件实体.

现在还有更多:正如你所看到的,我从fileEntry继承了thumbnailfileEntry和MediafileEntry,让我们不要辩论! (就目前而言),它是设计的最终故事方面之一,两种实体类型将在以后继续增长.

对于从文件实体到MediaFeedItem的关系引起的多态关联,这已经给我带来了一些重要的问题.

您要注意的第一件事是我已将导出属性从派生文件实体(thumbnailfileEntry和MediafileEntry)中删除到主要实体MediaFeedItem.

我这样做是因为他们已经继承了基类fileEntry中定义的属性.如您所见,我不删除这些关联末尾的角色.

关系模型

我将使用极其概念上优越的TPT策略来生成我的对象模型并将其映射到RDB世界(与TPH / TPC相比).

我正在使用EF5-rc,EDMX模型设计师来设计我的模型,使用EF5 DbContext Generator来生成DbContext和POCO,因为我想使用DbContext API.

如您所见,我可以使用EF工具很好地生成数据库模型:

问题

加载新的MediaFeedItem并保存它时,我收到以下错误:

system.invalIDOperationException:违反了Multicplicity约束. “MediaFeedModel.MediaFeedItem_Metadatafile”关系的“Metadatafile”角色具有多重性1或0..1.

我究竟做错了什么?

解决方法 看一下你的问题,有一点很突出,file和MediaFeedItem之间的FK关系是必需的(IE文件必须有一个MediaFeedItem),但是如果你在file的扩展版本中你可能不想要这个.

我认为你想要做的是以下之一:

>将MediaFeedItem_fileEntry的多重性更改为0..1 – 0..1,以便在任何一端都不需要它
>创建一个新的扩展类型来处理Metadatafile类型,并删除基类型和MediaFeedItem之间的直接引用

我个人认为第二种方法是为您的问题创建一个更实际的类型,因为它为您的Metadatafile创建了一个实际的类型

似乎正在发生的是您正在尝试创建扩展类型,但基本类型实际上不是元数据文件.

总结

以上是内存溢出为你收集整理的c# – 实体框架上的多态交叉关联全部内容,希望文章能够帮你解决c# – 实体框架上的多态交叉关联所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1234794.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-06
下一篇 2022-06-06

发表评论

登录后才能评论

评论列表(0条)

保存