EF代码首先是自动外键关联问题

时间:2011-01-26 11:11:51

标签: c# asp.net-mvc ef-code-first

我通过本教程首先掌握了最新版本的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修饰属性?或者我是否要求它理解它永远不会的东西?!

提前感谢所有人。无论如何我会坚持不懈地发回我发现的任何东西。 罗布

2 个答案:

答案 0 :(得分:1)

尝试使用类似

的ForeignKey属性标记您的HomePage属性
[Foreignkey("HomePageId")]
public virtual SitePage HomePage { get; set; }

你也可以使用流畅的配置,但不记得那个随便的

答案 1 :(得分:0)

这可能是EF的限制。 EF只能处理2个表之间的一个关系。

表格,网站页面列表和主页之间有两种关系。

尝试删除此行:

public virtual SitePage HomePage { get; set; } 

您仍然拥有homepageid,因此这种信息在某种程度上是多余的。