Entity Framework 4 和 DB2:数据库生成错误

发布于 2024-10-27 15:37:54 字数 761 浏览 1 评论 0原文

我们在 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情深缘浅 2024-11-03 15:37:54

我会尝试首先从 CreateDatabaseIfNotExists 继承,这会将 EdmMetadata 表添加到架构中。我相信错误是 EF 说它找不到该表。

因此,

DbDatabase.SetInitializer<ProductContext>(new CreateDatabaseIfNotExists<ProductContext>());

运行一次,然后在 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

DbDatabase.SetInitializer<ProductContext>(new CreateDatabaseIfNotExists<ProductContext>());

Run it once, then change to DropCreateDatabaseIfModelChanges once the EdmMetadata table exists.

在梵高的星空下 2024-11-03 15:37:54

尝试像这样删除 IncludeMetadataConvention:modelBuilder.Conventions.Remove();
为了避免“dbo”问题,只需使用 DataAnnotation 属性或 Fluent 映射来映射所有实体:

[Table("Product", SchemaName = "MySchema")]
public class Category { //DataAnnotoaion approach

modelBuilder.Entity<Category>().ToTable("Categories", "MySchema"); //Fluent approach

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:

[Table("Product", SchemaName = "MySchema")]
public class Category { //DataAnnotoaion approach

modelBuilder.Entity<Category>().ToTable("Categories", "MySchema"); //Fluent approach
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文