我的MVC项目中,EF分部类,假设实体A、B、C、D字段如下,省略了public、类型和get,set哈
A{AID,Title,BID,CID,DID,public virtual B b,public virtual C c,public virtual D d}
B{BID,Title,CID,DID,public virtual C c,public virtual D d}
C{CID,Title}
D{DID,Title}
也就是说A、B都加载了C、D,但A又多加载了B。
在MVC里实现了A的Details,报错,
类型“B”的关联元数据类型包含以下未知属性或字段: C, D。请确保这些成员的名称与主类型上的属性的名称匹配。
请问如何解决这种情况?穷人,没分,请见谅!!
没有定义好实体关系,请参考:Entity Framework 实践系列 —— 搞好关系 - 单相思(单向一对一,one-to-one)
DUDU老大,不知道你说的是不是[ForeignKey("")]?
最早我的部分类定义是有加的,出错之后我也是想到这个,注释掉之后再运行也是这样出错。但是我定义的形式跟你写的不一样,你是
{
[ForeignKey("c")]
public int CID;
public C c
}
我的呢是这样的形式
{
public int CID;
[ForeignKey("CID")]
public C c
}
实际上,这两种形式都是可以用的!甚至不加[ForeignKey("")]都可以读出来正确的c.Title。
话说我按照你的形式改了[ForeignKey("")]之后运行仍然出错,开始想是不是问题并非出现在这里,于是想到了之前因为数据库表里原本有数据(我用的是Database First),创建关系图的时候校验原有数据出错,再者园子里有一篇文章提到说不太赞成在数据库里创建关系,所以这个表B实际上并没有创建表C、D的关系。于是跑去创建关系,并关闭原有数据校验,成功保存关系图,刷新EDMX并重新生成。错误消失了。。。
很奇怪为什么[ForeignKey("")]加或不加,或加在哪,实际上都可以,最终决定的是数据库里创建的关系?