我有一个表“ Courses”映射到两个实体“ Course”和“ CourseDetails”。
两者都具有带有虚拟导航属性的POCO类。
两个实体使用相同的ID(课程上的身份,但不在课程详细信息上)。
实体之间的映射是“参照完整性约束”,不在“映射”窗口中。
课程是约束的原则。

我正在使用LazingLoading和ProxyCreationEnabled。

调用context.SaveChanges()之后,连接看起来很好(ID,引用和数据)。

当从上下文循环中访问Course.CourseDetails时,课程得到由Course的构造函数创建的默认空CourseDetails,而不是实际的CourseDetails数据!

当我调用context.LoadProperty(course,c => c.CourseDetails)时,我收到一条InvalidOperationException消息:

“违反了多重性约束。关系'OrmComparisons.EFPocos1.CourseDetailsCourse'的角色'CourseDetails'具有多重性1或0..1。”

问题1:为什么course.CourseDetails为空?
问题2:为什么我会收到例外情况?
问题3:我应该怎么做?

如果有人想查看,我可以共享解决方案+ sql文件。

最佳答案

在将自己写的POCO与模板生成的POCO进行比较之后,
我注意到Fix___方法,该方法用于修复导航属性。
其他所有类型的关系(一对多,多对多继承)
使用虚拟属性和延迟加载。
只有表分裂为一对一的关系。

无论如何-解决方法是使用t4生成的POCO,而不是使用简单的{get;组; }属性。

关于entity-framework - EF4:使用POCO将表格分为两个实体-为什么会出现异常?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5343104/

10-09 23:02