C# 使用CreateDatabase()时,数据库中缺少表

C# 使用CreateDatabase()时,数据库中缺少表,c#,database,entity-framework,C#,Database,Entity Framework,以下是参数: MyEntities db = new MyEntities(theParameter); 当我将watch添加到db中时,它有许多表,其中包括表tblTestTable。之后,我会: metadata=res://*/Models.My.csdl|res://*/Models.My.ssdl|res://*/Models.My.msl;provider=System.Data.SqlClient;provider connection string='Data Source=

以下是参数:

MyEntities db = new MyEntities(theParameter);
当我将watch添加到db中时,它有许多表,其中包括表tblTestTable。之后,我会:

 metadata=res://*/Models.My.csdl|res://*/Models.My.ssdl|res://*/Models.My.msl;provider=System.Data.SqlClient;provider connection string='Data Source=[correctIpAddress];Initial Catalog=testDbName;User ID=myUsername;Password=myPassword;MultipleActiveResultSets=True'
在新创建的数据库中没有tblTestTable表。为什么会这样

当我将watch添加到db中时,它有许多表,其中包括表 tblTestTable

我猜您的意思是在名为
db
ObjectContext
实例上的调试器中添加一个watch,您正在监视
ObjectSet
s,它们是派生上下文中的属性,其中一个属性名为
tblTestTable
,对吗

通常,
ObjectSet
和数据库中的表之间没有严格的一对一关系。您的上下文中可以有一个不表示自己表的对象集,例如:

  • 如果
    ObjectSet
    /
    tblTestTable
    的实体
    T
    是从另一个基本实体派生的,并且此继承映射为每个层次结构的表策略,则两个实体将使用同一个表,通常与基本实体一样命名。(通常不需要为派生实体创建这样一个单独的集合,但这是可能的。)在这种情况下,
    tblTestTable
    在数据库中没有自己的表

  • 单个表可以拆分为多个实体(称为“表拆分”)。上下文中可以有两个或多个对象集,但所有对象集都将使用同一个表

甚至另一种方法也是可能的:在上下文中可以有两个对象集,但它们将生成三个表。如果这两个实体由多对多关系关联,而该关系由数据库中的附加第三个联接表表示,而没有自己的对象集,则会发生这种情况


这些只是一些可能的原因。如果看不到模型和关系的详细信息,就很难对您的问题给出更具体的答案。

该表没有创建,因为它没有主键。
一旦我设置了它,它就和其他的一起创建了。

你在做
AcceptChanges()
?@NikhilAgrawal我不明白。“do AcceptChanges()”是什么意思?
db.CreateDatabase();