1

我正在使用 Oracle 11g 数据库。在数据库和索引器中创建的许多表应用于主键。之后我使用 Entity Framework 5.0 连接数据库。问题是,当我在表中保存任何记录时,它不会发送自动递增值的主键。

public HttpResponseMessage PostCategory(TBLCATEGORY tblcategory)
    {
        if (ModelState.IsValid)
        {
            db.TBLCATEGORies.Add(tblcategory);
            db.SaveChanges();
            int32 ID=tblcategory.ID;
            return ID;
        }
    }

它返回 ID = 0;还有一件事,在 oracle 中创建任何整数列时,它在实体框架中显示十进制。

4

2 回答 2

1

我假设您已经在 Oracle 数据库中定义了一个序列和一个触发器,它执行 ID 列的自动递增,因此只有 EF 模型中的对象没有更新,但数据库中的实际条目具有正确的递增 ID价值,对吧?

那么问题是edmx模型不知道该列实际上是数据库中生成值的ID列。您必须手动编辑 edmx 模型。SSDL 部分中的相应列条目必须将 StoreGeneratedPattern 属性设置为“Identity”。这告诉模型在插入后再次检查数据库以查找生成的 ID 值。但是,每次您从数据库更新模型时,您的手动更改都会丢失。

我写了一篇关于它的简短博客文章:http: //blog.aitgmbh.de/2014/06/02/patch-for-entity-framework-models-based-on-oracle-databases/

而且我创建了一个 NuGet 包,它可以在您构建项目时为您完成所有工作:http: //bit.ly/1hbxIsO

这样,即使在更新您的 edmx 模型之后,Identity 属性也会再次添加到指定的 ID 列中。

于 2014-06-03T08:31:18.473 回答