关于DbSet和DbContext

我看到一段将DbSetDbContext混合在一起的代码。 我在Entity Framework上不够强大。 我以为他们是不同的东西。

有人能给我一点解释吗?

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

直观上,DbContext对应于您的数据库(或数据库中的表和视图的集合),而DbSet对应于数据库中的表或视图。 所以你会得到两者的结合是非常有意义的!

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

如果你的数据库中有10个表,并且你的应用程序可以和5个表一起工作(让我们称它们为表1 – 表5),那么使用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既用作types的名称,又用作定义的上下文types中的属性的名称。 你上面看到的是非常典型的。 下面给出了一个对应于表模式的类的例子:

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

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

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