Edmx没有返回自动递增的值

时间:2013-07-29 12:40:17

标签: c# oracle11g entity-framework-5

我正在使用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中创建任何列Integer时,它在Entity Framework中显示十进制。

2 个答案:

答案 0 :(得分: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列。

答案 1 :(得分:0)