错误:'DataBase'中的实体参与'FK_MSCourse_Language'关系。找到了0个相关的“语言”。 1'语言'是预期的

时间:2013-02-12 16:33:17

标签: c# database linq entity-framework foreign-keys

您好,我试图从我的数据库中获取一些日期,但它不会工作,我真的不知道为什么。

我得到以下错误:

Error: Entities in 'DataBase' participate in the 'FK_MSCourse_Language' relationship. 0 related 'Language' were found. 1 'Language' is expected. 

我的代码:

var language = db.Language.Where(x => x.Designation == publicLanguage);

if (language != null)
{
  newCourse.Language = language.SingleOrDefault();
}
else
{
  newCourse.Language = db.Language.SingleOrDefault(x => x.Designation == "English");
}

如果我这样做,它可以工作,但我想从DataBase动态地将它用于语言。

switch (publicLanguage)
{
  case "French":
    newCourse.Language = db.Language.SingleOrDefault(x => x.Designation == "French");
    break;
  default:
    newCourse.Language = db.Language.SingleOrDefault(x => x.Designation == "English");
    break;
}

任何人都知道我做错了什么?

谢谢, 马库斯

1 个答案:

答案 0 :(得分:0)

LINQ的Where操作返回一个IEnumerable,它永远不会为null,这使得if块无效。无论如何,它总是会执行newCourse.Language = language.SingleOrDefault();

我也在考虑尝试在最有可能是字符串变量的地方使用==也可能会导致一些问题。我建议使用.Equals()方法,这将实际调查字符串是否相等。此外,既然你只想抓住第一个,为什么不这样做呢:

var language = db.Language.FirstOrDefault(x => x.Designation.Equals(publicLanguage));

这将获取与该语言匹配的第一个,或返回null。在这种情况下,那么你可以只有一个if语句,如果language变量实际上为空,那么它将指定英语作为语言。