首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >空dbSet in ApplicationDbContext

空dbSet in ApplicationDbContext
EN

Stack Overflow用户
提问于 2015-01-04 23:21:47
回答 2查看 5.5K关注 0票数 3

在mvc5应用程序中,我在文件夹“模型”中创建类:

代码语言:javascript
复制
public class Code
{
    [Key]
    public Guid Id { get; set; }
    public string UserId { get; set; }
}

并进行迁徙。

我还得到了类(上下文,自动生成):

代码语言:javascript
复制
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
    }

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

在我的一个控制器中,我编写了方法:

代码语言:javascript
复制
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.Codes都有0条。

但是,在我保存的数据库更改中,我得到了以下项:

有谁知道这种现象的原因吗?我无法从数据库中找到项目,但我可以免费保存新项目。有人知道吗,怎么从我的数据库里得到所有的“密码”?

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

致以亲切的问候。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-01-05 01:24:18

为未来的搜索者做准备:

在实体框架中看到查询结果之前,必须将视图具体化。EF从它的大多数方法返回IQueryableIQueryable实际上是一种机制,它允许EF继续构建从数据库获取所需数据所需的sql。这就是为什么当您处于调试视图中时,它在查看Select [Columns] From [table] as Extent1时显示类似于DbSet的内容。还没有执行的只是SQL。当您实际尝试从集合访问属性或对象时,EF将向db发送查询并将结果具体化。

在大多数情况下,将结果具体化应该是一种自然现象。如果您需要一个用户列表,您应该调用ToList()方法来实现结果。如果您只想要一个记录,那么应该使用FirstOrDefault()方法来实现单个记录,如果没有发现,则使用null

示例:

代码语言:javascript
复制
//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才会加载实体,如果您处理上下文,然后尝试访问视图中的结果,则会导致问题。这将导致异常,因为没有上下文可以为您加载结果。

票数 3
EN

Stack Overflow用户

发布于 2016-05-24 18:20:09

您可能需要检查您的Web.config文件中是否有正确的连接字符串。当然,这是不同的,但是您应该有如下内容:

代码语言:javascript
复制
<connectionStrings>
  <add name="DefaultConnection" connectionString="Data Source=.\;Initial Catalog=MyDatabaseName;Integrated Security=True" providerName="System.Data.SqlClient" />
</connectionStrings>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27771467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档