在过去的两天里,我一直在尝试了解 EF 多对多关系,即使在这里搜索了十几个不同的问题后,我仍然遗漏了一些东西。
我有一个名为的模型Text
,它可以与任意数量的Tag
模型相关联,显然,至少在理论上,每个模型Tag
都可以与任意数量的文本相关联。Entity Framework 似乎很好地理解了这一点,无需我要求它就可以在数据库中创建一个名为 TextTags 的表,而且我可以Text.Tags
毫无问题地访问,但是当我尝试Tag.Texts
在我的代码中访问时,我得到一个空引用异常。
现在,我可以手动将每个文本添加到每个标签(或者我可以吗?这似乎会引发某种错误),但这似乎违背了目的......除此之外,它似乎也容易出错。我不明白什么?
要求的代码:
文字模型:
public class Text
{
public int ID { get; set; }
public Author Author { get; set; }
public string Content { get; set; }
public virtual ICollection<Tag> Tags { get; set; }
}
标签型号:
public class Tag
{
public int ID { get; set; }
public string Name { get; set; }
public ICollection<Text> Texts { get; set; }
}
数据插入:
using (var db = new TextDbContext())
{
db.Authors.Add(new Author()
{
Name = "Poe"
});
db.Tags.Add(new Tag() { Name = "lame" });
db.Tags.Add(new Tag() { Name = "example" });
db.SaveChanges();
db.Texts.Add(new Text()
{
Author = db.Authors.First(),
Tags = db.Tags.ToList(),
Content = "This is the first text by Poe."
});
db.Texts.Add(new Text()
{
Author = db.Authors.First(),
Tags = db.Tags.ToList(),
Content = "This is the second text by Poe."
});
db.Texts.Add(new Text()
{
Author = db.Authors.First(),
Tags = db.Tags.ToList(),
Content = "This is the third text by Poe."
});
db.SaveChanges();
}
错误:
foreach (var tag in db.Tags)
{
foreach (var text in tag.Texts)
{
Console.WriteLine("Tag: {0}\tText: {1}", tag.Name, text.Content);
// Null reference on line above.
}
}