Я получаю странное поведение из кода EF Сначала, когда я добавляю объект в базу данных и выбираю его из базы данных в том же HTTP-запросе.
Когда я получаю его, он возвращается как тип объекта, а не как тип System.Data.Entity.DynamicProxies, поэтому отложенная загрузка не работает.
Если я получаю тот же объект в следующем HTTP-запросе, он возвращается как тип System.Data.Entity.DynamicProxies, и отложенная загрузка работает нормально.
Нужно ли что-то делать с объектом или контекстом, чтобы вернуть DynamicProxy? Или как EF Code First должен работать, если да, то как мне обойти эту проблему?
Я даже воссоздал проблему, используя пример кода в пакетах NuGet.
Вот код, который я использовал для воссоздания проблемы:
public ActionResult Index() {
var blogContext = new BlogContext();
var posts = blogContext.Posts;
ViewBag.Message = "Welcome to ASP.NET MVC!";
ViewBag.Posts = posts;
return View();
}
public ActionResult AddPost() {
var blogContext = new BlogContext();
var post = new Post() {
PublishDate = DateTime.Now,
Text = "Text",
Title = "Title",
};
blogContext.Posts.Add( post );
blogContext.SaveChanges();
var post2 = blogContext.Posts.Find( post.ID );
return RedirectToAction( "Index" );
}
public ActionResult GetPost(int id) {
var blogContext = new BlogContext();
var post = blogContext.Posts.Find( id );
ViewBag.Post = post;
return View();
}
Когда я получаю post2 в действии AddPost, оно возвращает тип MvcApplication.Models.Post, где, когда я возвращаю тот же пост в действии GetPost, он имеет тип System.Data.Entity.DynamicProxies.Post.
Приведенный выше код был воссоздан с использованием приложения MVC3 по умолчанию из обновления MVC 3 Tools. Я также установил следующие пакеты NuGet: EntityFramework.Sample и EntityFramework.SqlServerCompact.
Если кто-то сможет воссоздать проблему или найдет решение, тогда это будет очень признательно.