[asp.net-mvc]在 ApplicationDbContext 的空 dbSet

发布时间: 2017/3/25 19:54:35
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我的 mvc5 应用程序中创建类文件夹中"的模型":

public class Code
{
    [Key]
    public Guid Id { get; set; }
    public string UserId { get; set; }
}

并进行迁移。

还有类 (上下文,自动生成)︰

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
    public DbSet<Code> Codes { get; set; }
}

在我的控制器之一我写方法︰

using (var db = new ApplicationDbContext())
{
    var manager =
        new UserManager<ApplicationUser>(new UserStore<ApplicationUser>(db));
    var user = manager.FindById(User.Identity.GetUserId());
    Code codeD = new Code();
    codeD.Id = Guid.NewGuid();
    codeD.UserId = user.Id;
    db.Codes.Add(codeD);
    db.SaveChanges();
}

但每次当我做它,db。代码得到了 0 个项目。enter image description here

但在我的数据基地保存的更改,我得到了这个项目︰enter image description here

任何人都知道这种现象的原因吗?我不能达到从数据基础,但 im 免费保存新项目的项目。有人知道吗,如何从我的数据库中获取所有的"代码"?

我用生成的 mvc5 项目,所以 ApplicationUserDbContext 生成自动。

亲切问候。

解决方法 1:

移动为未来搜索回答︰

你可以看到在实体框架中的查询的结果之前,你必须具体化视图。 EF 返回 IQueryable 的大部分从其 ' 方法。 IQueryable实际上是一种机制,允许 EF,继续建立需要的 sql 来从数据库获取所需的数据。 这是为什么当你在调试查看它显示类似 Select [Columns] From [table] as Extent1 查看 DbSet 时。 它是只是还没有要执行的 SQL。 当你实际上尝试访问的属性或对象从集时,EF 会将查询发送到数据库和实现结果。

物化的结果应该是自然发生的大部分。 如果您需要的用户列表,则应调用 ToList() 方法具体化的结果。 如果你只想要一条记录,则应使用 FirstOrDefault() 方法将实现单个记录或 null 如果没有找到。

示例︰

//Materializing a collection of users
public ActionResult Users() 
{
    //The DbContext has been initialized elsewhere
    var users = _db.Users.Where(user => user.IsActive).ToList();

    return View(users);
}

//Materializing a single record
public ActionResult User(int userId)
{
    var user = _db.Users.FirstOrDefault(user => user.Id == userId && user.IsActive);
    if (user == null) return HttpNotFound();

    return View(user);
}

它是重要的是注意到 EF 的加载实体提出请求时才会导致问题,是否你处置的上下文,然后尝试访问该视图中的结果。 这将导致引发异常,因为没有可以为你加载结果的上下文。

官方微信
官方QQ群
31647020