关于DbSet和DbContext

40 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();
}
Run Code Online (Sandbox Code Playgroud)

Mil*_*dis 73

直观地说,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; }
}
Run Code Online (Sandbox Code Playgroud)

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

public class Table1 
{
   public int Id {get; set;}
   public string AStringField {get; set;}
   //etc.
}
Run Code Online (Sandbox Code Playgroud)

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

  • 通常,我相信习惯性地以单数形式表示`DbSet`的类型参数,并以复数形式表示属性名称。例如:`public DbSet &lt;Customer&gt;客户{ 组; }` (4认同)

Dan*_*ite 21

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; }
}
Run Code Online (Sandbox Code Playgroud)