【发布时间】: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 => x.SiteSettingOption)。 -
非常感谢。我错误地认为引号内的字符串指向数据库中的一个表。作为旁注,我不能在 DAL 项目的任何地方使用 lambda。我不确定为什么。我收到“无法将 lambda 表达式转换为类型字符串”的编译错误。我到处都看到过这个帖子,但对我没有用。
-
无论出于何种原因,基于 lambda 的
Include是不同命名空间中不同类中的扩展方法。您需要添加using System.Data.Entity才能使用它。 -
本……你太棒了!再次感谢您的帮助。
标签: c# asp.net-mvc entity-framework-5