我通过本教程首先掌握了最新版本的EF代码 - http://www.asp.net/mvc/tutorials/getting-started-with-mvc3-part4-cs但是我对一个方面感到有些困惑,并想知道是否有人可以解释它?为了解释 - 有一个名为“Site”的类,我希望有一个名为“HomePageId”的字段,然后该字段应映射到具有该Id的“SitePage”对象。看起来很简单?但是当EF创建Db和关系时,它似乎并不理解这一点。我确定这是我做错了 - 这是代码:
public class Site
{
public int SiteId { get; set; }
public string SiteName { get; set; }
public string SiteUrlPortion { get; set; }
// Relationship - SitePages
public virtual ICollection<SitePage> SitePages { get; set; }
// Relationship - HomePage
public int HomePageId { get; set; }
public virtual SitePage HomePage { get; set; }
}
public class SitePage
{
public int SitePageId { get; set; }
public string SitePageTitle { get; set; }
public string SitePageUrlPortion { get; set; }
// Relationship - Site
public int SiteId { get; set; }
public virtual Site Site { get; set; }
}
“SitePage”类会像您期望的那样生成回到“站点”的关系。但是我在两个表中的列中所获得的不仅没有意义,而且代码方面的关系不能按预期工作。 (例如,当我向“网站”提供“HomePageId”时,该网站的“主页”为空。
显然,文档方面几乎没有,因为这仍然在开发中,但只是想知道是否有人有任何想法?我是否需要开始使用Attributes修饰属性?或者我是否要求它理解它永远不会的东西?!
提前感谢所有人。无论如何我会坚持不懈地发回我发现的任何东西。 罗布
答案 0 :(得分:1)
尝试使用类似
的ForeignKey属性标记您的HomePage属性[Foreignkey("HomePageId")]
public virtual SitePage HomePage { get; set; }
你也可以使用流畅的配置,但不记得那个随便的
答案 1 :(得分:0)
这可能是EF的限制。 EF只能处理2个表之间的一个关系。
表格,网站页面列表和主页之间有两种关系。
尝试删除此行:
public virtual SitePage HomePage { get; set; }
您仍然拥有homepageid,因此这种信息在某种程度上是多余的。