Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF代码第一个自动外键关联问题_C#_Asp.net Mvc_Ef Code First - Fatal编程技术网

C# EF代码第一个自动外键关联问题

C# EF代码第一个自动外键关联问题,c#,asp.net-mvc,ef-code-first,C#,Asp.net Mvc,Ef Code First,通过本教程,我已经基本掌握了最新版本的EF代码——但我对其中一个方面有点困惑,不知道是否有人可以解释一下?为了解释-有一个名为“Site”的类,我希望有一个名为“HomePageId”的字段,然后该字段应该映射到具有该Id的“SitePage”对象。看起来足够简单吗?但当EF创建Db和关系时,它似乎并不理解这一点。我肯定这是我做错了什么-下面是代码: public class Site { public int SiteId { get; set; } public string

通过本教程,我已经基本掌握了最新版本的EF代码——但我对其中一个方面有点困惑,不知道是否有人可以解释一下?为了解释-有一个名为“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; }       
}
公共类站点
{
public int SiteId{get;set;}
公共字符串SiteName{get;set;}
公共字符串siteurlpartion{get;set;}
//关系-站点页面
公共虚拟ICollection站点页面{get;set;}
//关系-网页
public int HomePageId{get;set;}
公共虚拟站点页面主页{get;set;}
}
公共类站点页面
{
public int SitePageId{get;set;}
公共字符串SitePageTitle{get;set;}
公共字符串SitePageUrlPartion{get;set;}
//关系-站点
public int SiteId{get;set;}
公共虚拟站点站点{get;set;}
}
“SitePage”类按照您的预期生成与“Site”的关系。但是我在这两个表中得到的列不仅没有意义,而且代码方面的关系也没有像预期的那样起作用。(例如,当我给“站点”一个“HomePageId”时,站点的“主页”为空

显然在文档方面几乎没有什么,因为这仍在开发中,但只是想知道是否有人有任何想法?我需要开始用属性装饰属性吗?还是我要求它理解一些它永远不会理解的东西

提前感谢大家。无论如何我都会坚持下去,并把我发现的任何明显的东西都发回。
Rob

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

表与站点页面列表和主页之间有2种关系

尝试删除此行:

public virtual SitePage HomePage { get; set; } 

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

请尝试使用ForeignKey属性标记您的主页属性,如下所示

[Foreignkey("HomePageId")]
public virtual SitePage HomePage { get; set; }

您也可以使用fluent配置,但不要马上记住这一点,谢谢您的回答。我知道您在说什么,但接下来我必须执行进一步的查询,如“sitePages.Single(p=>p.SitePageid==this.HomePageId)”在某个地方——可能是主页实体类本身让我不安——我会尝试一下!事实上,这会抛出一个错误——“已经有一个打开的DataReader与此命令关联,必须先关闭。”。答案可能是设置一个单独的实体,称为“主页”。我现在就试试。还要检查您的连接字符串是否将MultipleActiveResultSets设置为true。嗨,Tom-感谢您的建议。我确实尝试过,但结果相同。我现在仍坚持解决方法-两个非关键列“主页id”和“主页url”-这并不理想,但因为它们是我真正需要使用的仅有的两个数据,没有完整的“主页”对象,这不是一次火车撞车。。