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

时间:2012-09-28 06:08:57

标签: c# database entity-framework

MyEntities db = new MyEntities(theParameter);

这是参数:

 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'

当我向db添加监视时,它有许多表,其中包括表tblTestTable。之后我做了:

db.CreateDatabase();

在新创建的数据库中没有tblTestTable表。为什么会这样?

2 个答案:

答案 0 :(得分:0)

  

当我向db添加监视时,它有许多表,其中包括表   tblTestTable。

我想你的意思是你在一个名为ObjectContext的{​​{1}}实例上的调试器中添加一个监视,你正在观察导出的上下文中属性的db和其中一个这些属性称为ObjectSet<T>,对吗?

通常,tblTestTable与数据库中的表之间没有严格的一对一关系。您可以在上下文中使用不代表其自己的表的ObjectSet,例如:

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

  • 单个表可以拆分为多个实体(称为“Table-Splitting”)。您可以在上下文中使用两个或更多ObjectSet,但所有ObjectSet都将使用相同的表。

即使反过来也是可能的:您可以在上下文中拥有两个ObjectSet,但它们将生成三个表。如果两个实体通过多对多关系相关联,而这种关系由数据库中另外的第三个连接表表示而没有自己的ObjectSet,则会发生这种情况。

这些只是可以的原因。如果没有看到模型和关系的细节,就很难对问题给出更具体的答案。

答案 1 :(得分:0)

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