关于DbSet和DbContext

时间:2012-11-29 14:22:04

标签: c# entity-framework

我看到一段代码将DbSetDbContext混合在一起。我对实体框架不太满意。我认为它们是不同的东西。

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

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();
}

2 个答案:

答案 0 :(得分:67)

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

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

如果您的数据库中有10个表,并且您的应用程序使用其中的5个表(我们称之为Table1 - 表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/

答案 1 :(得分:18)

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