关于DbSet和DbContext
我看到一段将DbSet
和DbContext
混合在一起的代码。 我在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; } }