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

本文关键字:实体 路径 虚拟 无效 包含 框架 错误 | 更新日期: 2023-09-27 18:32:00

我遇到错误,大意是"指定的包含路径无效。实体类型'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();
 }
}

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

为了预先回答几个问题,我没有使用LazyLoad,也没有在模型创建上做任何事情。

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

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

谢谢本...

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