我正在为 ASP.NET MVC 3 构建一个论坛项目,该项目在带有最新版本的实体框架的 .NET 4 上运行。
我有通常的论坛设计,有一个带有类别的板、带有论坛的类别、带有主题的论坛和带有帖子的主题等。
简化:
public class Category {
[Required]
public virtual Board Board { get; set; }
}
public class Forum {
[Required]
public virtual Category Category { get; set; }
}
public class Topic {
[Required]
public virtual Forum Forum { get; set; }
}
public class Post {
[Required]
public virtual Topic Topic { get; set; }
}
当创建新帖子时,会通知主题;当主题更改时,会通知论坛。
所以,再次简化:
public class Forum {
public void TopicChanged(Topic topic) {
// Do stuff
}
}
public class Topic {
public void PostAdded(Post post) {
// Do stuff
this.Forum.TopicChanged(this);
}
}
因此,在创建新帖子(并将其提交到数据库)后,我在父主题上调用 PostAdded。现在这就是奇怪的地方!
当我将更改提交到存储库时,出现验证错误,需要论坛类别。
如果我查看数据库,论坛会引用父类别。如果我停止代码并查看 Forum 对象,它有一个 Category 实例。所以这看起来像是延迟加载的问题,特别是因为如果我添加这一行:
var cat = this.Category
在 Forum 类中 TopicChanged 方法的底部,不再有任何错误。
我在这里做的是完全错误的事情吗?我是否遇到了边缘问题,或者发生了什么?我认为 EF 会看到该引用是一个延迟加载的引用,如果它没有被更改,那么没有理由在保存时失败???
谢谢,
斯蒂恩