0
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'

当我将 watch 添加到 db 时,它有很多表,其中有表 tblTestTable。之后我这样做:

db.CreateDatabase();

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

4

2 回答 2

0

当我将 watch 添加到 db 时,它有很多表,其中有表 tblTestTable。

我猜你的意思是你在调试器中添加一个 watch 到一个ObjectContext名为的实例上db,你正在观察ObjectSet<T>派生上下文中的属性 s ,其中一个属性被称为tblTestTable,对吧?

ObjectSet<T>通常,数据库中的表和表之间没有严格的一对一关系。您可以在上下文中拥有一个不代表其自己的表的 ObjectSet,例如:

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

  • 单个表可以拆分为多个实体(称为“表拆分”)。您的上下文中可能有两个或多个 ObjectSet,但它们都将使用同一个表。

甚至可以采用相反的方式:您可以在上下文中有两个 ObjectSet,但它们会生成三个表。如果这两个实体通过多对多关系相关联,该关系由数据库中没有自己的 ObjectSet 的附加第三个连接表表示,则会发生这种情况。

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

于 2012-09-28T20:31:28.773 回答
0

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

于 2012-10-21T16:27:08.980 回答