【问题标题】:Entity Framework Error: Specified Include Path Is Not Valid for Virtual Entity [duplicate]实体框架错误:指定的包含路径对虚拟实体无效 [重复]
【发布时间】:2014-11-25 16:19:47
【问题描述】:

我遇到的错误是“指定的包含路径无效。EntityType '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 的新手。这是我的第一个应用程序。

【问题讨论】:

  • 您的财产被称为SiteSettingOption(没有s),但您正在尝试Include("SiteSettingOptions")(注意最后的s)。删除最后一个 s。您可以通过使用使用 lambdas 而不是字符串的 Include 扩展来避免这种情况,这将类似于 Include(x =&gt; x.SiteSettingOption)
  • 非常感谢。我错误地认为引号内的字符串指向数据库中的一个表。作为旁注,我不能在 DAL 项目的任何地方使用 lambda。我不确定为什么。我收到“无法将 lambda 表达式转换为类型字符串”的编译错误。我到处都看到过这个帖子,但对我没有用。
  • 无论出于何种原因,基于 lambda 的 Include 是不同命名空间中不同类中的扩展方法。您需要添加using System.Data.Entity 才能使用它。
  • 本……你太棒了!再次感谢您的帮助。

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


【解决方案1】:

谢谢本...

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 1970-01-01
    • 2013-03-11
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    相关资源
    最近更新 更多