Entity Framework 4 和 DB2:数据库生成错误
我们在 Visual Studio 2010 上使用 Entity Framework 4 RC 和 DB2 版本 9.7.3.4。我还有 VS 插件,并且可以在服务器资源管理器中看到 DB2 数据库。我创建了一个非常简单的 VS 控制台项目,它在 SQL Server 上运行良好,所以我知道它是有效的。我的项目中引用了“IBM.Data.DB2.9.7.3”和“IBM.Data.DB2.Entity”。
在 app.config 中,我的连接字符串是:
<add name="ProductContext"
providerName="IBM.Data.DB2"
connectionString="Database=DB2TEST;User ID=XXXX;PWD=XXXX;Server=XXXX;Persist Security Info=True;"/>
我的代码中的第一个语句是数据库初始值设定项:
DbDatabase.SetInitializer<ProductContext>(new DropCreateDatabaseIfModelChanges<ProductContext>());
在运行时,当我到达导致数据上下文更改的行时,我收到错误:
无法检查型号兼容性 因为数据库不包含 模型元数据。
由于我请求删除数据库,因此这似乎不是逻辑错误。有谁知道可能是什么原因?
We are using Entity Framework 4 RC on Visual Studio 2010 with DB2 version 9.7.3.4. I also have the VS Add-ins and can see the DB2 database in Server Explorer. I have created a very simple VS console project and it works fine against SQL Server, so I know it is valid. I have references to "IBM.Data.DB2.9.7.3" and "IBM.Data.DB2.Entity" in my project.
In app.config my connnection string is:
<add name="ProductContext"
providerName="IBM.Data.DB2"
connectionString="Database=DB2TEST;User ID=XXXX;PWD=XXXX;Server=XXXX;Persist Security Info=True;"/>
The first statement in my code is a database initializer:
DbDatabase.SetInitializer<ProductContext>(new DropCreateDatabaseIfModelChanges<ProductContext>());
During run-time when I reach a line that causes a change to the data context I get the error:
Model compatibility cannot be checked
because the database does not contain
model metadata.
Since I requested that the database be dropped, this does not seem to be a logical error. Does anyone know what the cause could be?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
我会尝试首先从 CreateDatabaseIfNotExists 继承,这会将 EdmMetadata 表添加到架构中。我相信错误是 EF 说它找不到该表。
因此,
运行一次,然后在 EdmMetadata 表存在后更改为 DropCreateDatabaseIfModelChanges。
I would try to inherit from CreateDatabaseIfNotExists first, which will add the EdmMetadata table to the schema. I believe the error is that EF is saying that it cannot find that table.
So
Run it once, then change to DropCreateDatabaseIfModelChanges once the EdmMetadata table exists.
尝试像这样删除 IncludeMetadataConvention:
modelBuilder.Conventions.Remove();
为了避免“dbo”问题,只需使用 DataAnnotation 属性或 Fluent 映射来映射所有实体:
Try removing the IncludeMetadataConvention like this:
modelBuilder.Conventions.Remove<System.Data.Entity.Infrastructure.IncludeMetadataConvention>();
To avoid the "dbo" issue, just map all your entities using either DataAnnotation attributes or Fluent mapping: