48

我看到一段混合在一起的DbSet代码DbContext。我不擅长实体框架。我以为它们是不同的东西。

有人可以给我一点解释吗?

public class testContext : DbContext
{
    public testContext();

    public string IPAddress { get; set; }
    public DbSet<WSettings> Settings { get; set; }
    public string UserName { get; set; }

    public override int SaveChanges();
}
4

2 回答 2

88

直观地说,DbContext 对应于您的数据库(或数据库中的表和视图的集合),而 DbSet 对应于数据库中的表或视图。因此,您将得到两者的结合是完全合理的!

您将使用 DbContext 对象来访问表和视图(将由 DbSet 表示),并且您将使用 DbSet 来访问、创建、更新、删除和修改表数据。

如果您的数据库中有 10 个表并且您的应用程序使用其中的 5 个(让我们称它们为 Table1 - Table 5),那么使用 MyAppContext 对象访问它是有意义的,其中 MyAppContext 类是这样定义的:

public class MyAppContext : DbContext
{
    public MyAppContext () : ;

    public DbSet<Table1> Table1 { get; set; }
    public DbSet<Table2> Table2 { get; set; }
    public DbSet<Table3> Table3 { get; set; }
    public DbSet<Table4> Table4 { get; set; }
    public DbSet<Table5> Table5 { get; set; }
}

请注意,例如,标识符 Table1 既用作类型的名称,也用作定义的上下文类型中的属性名称。你在上面看到的很典型。下面给出了对应于表模式的类的示例:

public class Table1 
{
   public int Id {get; set;}
   public string AStringField {get; set;}
   //etc.
}

在这里查看更多信息:http ://entityframeworktutorial.net/

于 2012-11-29T14:25:19.620 回答
24

DbContext一般表示一个数据库连接和一组表。DbSet用于表示一个表。

您的代码示例不符合预期的模式。首先,它是不完整的。此外,有些属性确实不属于。

这种模式比较典型:

class User
{
   public string IPAddress { get; set; }
   public ICollection<Settings> Settings { get; set; }
   public string UserName { get; set; }
}

class MyContext : DbContext
{
   public DbSet<User> Users { get; set; }
   public DbSet<Settings> Settings { get; set; }
}
于 2012-11-29T14:23:59.380 回答