0

我已经设置了 3 个模型,首先是代码,并且关系似乎正常,但是一个给我带来了问题。

我有文章、语言和版本课程

public class Article
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Icon { get; set; }
}

public class Language
{
    public int ID { get; set; }
    public string Name { get; set; }
    public string Code { get; set; }
}

public class Edition
{
    public int ID { get; set; }
    public Article Article  { get; set; }
    public Language Language { get; set; }

    public string Title { get; set; }        
    public string Details { get; set; }
}

在我的引导程序/DBinitialiser 中,我可以创建对象并很好地填充它们。数据库已创建,Language 和 Article 的外键都出现在 Edition 表中并正确输入。

var engLang = new Language() {Code="en", Name="English Language"};
var altLang = new Language() {Code="xx", Name="Alternative Language"};
db.Languages.Add(engLang);
db.Languages.Add(altLang);
db.SaveChanges();

var testArt = new Article() { Name = "test" };
db.Articles.Add(testArt);
db.SaveChanges();

db.Editions.Add(new Edition(){Article = testArt, Language = engLang, Title="English Content"});
db.Editions.Add(new Edition(){Article = testArt, Language = altLang, Title="Alternative Content"});
db.SaveChanges();

我现在可以查询版本并返回它们的列表,但语言属性始终为 NULL。文章属性工作正常。

 var query = db.Editions.Where(r => r.Article.ID == Article.ID);

 foreach (Edition item in query)
 {
    // item.Language => NULL
    // item.Article => {Object Article}         
 }

我是 .net 和 Entity-Framework 的新手,无法弄清楚为什么我总是会收到此错误。我什至可以通过 r => r.Language.ID == 1 进行查询,并且仍然在 Edition 对象上获得 NULL 属性。

4

2 回答 2

1

确保您以正确的方式使用 EF codefirst。这里有一些歧义。您必须确定在您的 POCO 中实际应该存在哪些关系。更改类如下:

public class Article
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }
    public string Icon { get; set; }
}

public class Language
{
    [Key]
    public int ID { get; set; }
    public string Name { get; set; }
    public string Code { get; set; }
}

public class Edition
{
    [Key]
    public int ID { get; set; }
    public virtual Article Article  { get; set; }
    public virtual Language Language { get; set; }

    public string Title { get; set; }        
    public string Details { get; set; }
}
于 2013-01-03T19:33:21.370 回答
1

感谢 AmirHossein Mehrvarzi 帮助我更清楚地编写模型,我相信这个错误是由于在遍历查询结果时延迟加载实体引起的。参考:实体框架:已经有一个打开的 DataReader 与此 Command 关联

在没有启用的情况下,MultipleActiveResultSets我只是在我的 linq 中添加了一个Include语句

var query = db.Editions.Where(r => r.Article.ID == Article.ID).Include(r => r.Language);

foreach (Edition item in query)
{
    // item.Language => {Object Language}
    // item.Article => {Object Article}         
}
于 2013-01-04T09:52:54.780 回答