使用DbContext设置<T>()而不是在上下文中公开

Dis*_*ile 27 .net c# entity-framework ef-code-first dbcontext

执行以下操作时是否存在任何差异:

public class UsersContext : DbContext
{
    public DbSet<User> Users { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

与使用Set<T>上下文的方法:

public class UsersContext : DbContext
{
}

var db = new UsersContext();
var users = db.Set<User>();
Run Code Online (Sandbox Code Playgroud)

这些有效地做了同样的事情,给了我一组用户,但是除了你没有通过属性暴露集合之外还有什么大的差异吗?

Ser*_*rvy 17

Users为方便起见添加了该属性,因此您无需记住所有表的内容以及相应的类是什么,您可以使用Intellisense查看上下文旨在与之交互的所有表.最终结果在功能上等同于使用Set<T>.


Pin*_*nyM 6

使用Code-First迁移时,您可以使用前一种方法获益,因为将自动检测新实体.否则,我很确定它们是等价的.


Tra*_*s J 5

这就是我设置通用 dbSet 的方式,工作得很好

DbContext context = new MyContext();
DbSet<T> dbSet = context.Set<T>();
Run Code Online (Sandbox Code Playgroud)

它是更明确的事物的通用版本,例如

DbContext context = new MyContext();
DbSet<User> dbSet = context.Set<User>();
Run Code Online (Sandbox Code Playgroud)

无论哪种方式,它们都是相同的(当T是时User

  • @Dismissile - 没有限制或差异,除了您可以通过使用通用定义并传入类型来节省一些重复代码。 (2认同)