实体框架错误:指定的包含路径对虚拟实体无效

时间:2014-11-25 16:19:48

标签: c# asp.net-mvc entity-framework-5

我遇到了“指定的包含路径无效”的错误。实体类型'MyCMS.DAL.SiteSettings'未声明名为'SiteSettingOptions'的导航属性。“

我已经阅读了很多关于这个问题的帖子,但我所做的所有研究都与ICollections有关,而不是属于类的属性。

我就是这样,可以帮助您解决问题。

[Table("SiteSettingsBridge")]
[DataContract]
public partial class SiteSettings
{
    [Key]
    [DataMember]
    public int SiteSettingsBridgeID { get; set; }

    [DataMember]
    public int SiteID { get; set; }

    [DataMember]
    public int SiteSettingOptionID { get; set; }

    [DataMember]
    public virtual SiteSettingOptions SiteSettingOption { get; set; }

    [DataMember]
    [StringLength(500)]
    public string Value { get; set; }

    public SiteSettings()
    {
        SiteSettingsBridgeID = 0;
        SiteID = 0;
        SiteSettingOptionID = 0;
        Value = "";
    }
}



[DataContract]
public partial class SiteSettingOptions
{
    [Key]
    [DataMember]
    public int SiteSettingOptionID { get; set; }

    [DataMember]
    public string SettingsGroup { get; set; }

    [DataMember]
    [StringLength(100)]
    public string Name { get; set; }

    [DataMember]
    [StringLength(500)]
    public string DefaultValue { get; set; }

    [DataMember]
    public SettingType Type { get; set; }

    public enum SettingType
    {
        String = 1,
        Bool = 2,
        Integer = 3
    }

    public SiteSettingOptions()
    {
        SiteSettingOptionID = 0;
        SettingsGroup = string.Empty;
        Name = string.Empty;
        DefaultValue = string.Empty;
        Type = SiteSettingOptions.SettingType.String;
    }
}

然后在我的DAL项目中,我试图在这样的上下文查询中添加一个Include

public static List<Contracts.Sites.SiteSettings> GetBySiteID(int SiteID)
{
 using (CMSContext cntx = new CMSContext())
 {
    ///OMITTED FOR BREVITY

    return cntx.SiteSettings.Include("SiteSettingOptions").Where(i => i.SiteID == SiteID).ToList();

 }
}

当我编译并运行时,我收到上述错误。

预先回答几个问题,我没有使用LazyLoading而且我没有在模型创建上做任何事情。

是的,我是EF的新手。这是我的第一个应用程序。

1 个答案:

答案 0 :(得分:0)

谢谢Ben ......

您的属性称为SiteSettingOption(不是s),但您正在尝试Include("SiteSettingOptions")(注意最终的s)。删除最后一个。您可以通过使用包含lambdas而不是字符串的Include扩展来避免这种情况,这类似于Include(x => x.SiteSettingOption)