gpt4 book ai didi

c# - ApplicationDbContext 中的空 dbSet

转载 作者:行者123 更新时间:2023-11-30 16:09:21 24 4
gpt4 key购买 nike

在 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; }
}

在我的一个 Controller 中我写了方法:

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 个项目。 enter image description here

但是在我的数据库中保存了更改并且我得到了这些项目: enter image description here

有谁知道这种现象的原因吗?我无法访问数据库中的项目,但我可以自由保存新项目。有人知道如何从我的数据库中获取所有“代码”吗?

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

亲切的问候。

最佳答案

转向为 future 的搜索者回答:

在 Entity Famework 中看到查询结果之前,您必须具体化 View 。 EF 从它的大多数方法中返回 IQueryableIQueryable 实际上是一种允许 EF 继续构建从数据库中获取所需数据所需的 sql 的机制。这就是为什么当您在调试 View 中查看 DbSet 时它会显示类似 Select [Columns] From [table] as Extent1 的原因。只是尚未执行的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);
}

请务必注意,如果您处理上下文然后尝试访问 View 中的结果,EF 仅在请求时才加载实体可能会导致问题。这将导致异常,因为没有可以为您加载结果的上下文。

关于c# - ApplicationDbContext 中的空 dbSet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27771467/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com