.net - 如何在 .NET Entity Framework 中获取 Oracle 的下一个序列值?

标签 .net entity-framework oracle11g sequence nextval

我有一个 web api post 方法,可以在我的 Oracle 数据库的表中插入一个新行。我在处理表的主键时遇到了问题,该主键是一个序列值。我该怎么办 my_primary_key_seq.nextval在 Entity Framework 中?目前此代码有效,但当通过我们旧的 .net 网络表单插入新行时,它将违反 PK 唯一约束,该表单使用序列下一个值作为下一个主键。

decimal nextPK = context.FORMPPs.OrderByDescending(p => p.PPID).FirstOrDefault().PPID + 1;
item.PPID = nextPK;
context.FORMPPs.Add(item);
int result = context.SaveChanges();

最佳答案

我遇到了同样的问题,并在本网站和 Oracle 的帮助下解决了这个问题。我假设您使用的是 Database First,因为您提到了另一个旧应用程序使用相同的数据库。

我必须做一些事情。就像 Daniel Gabriel 提到的那样,如果您允许 Oracle 管理身份,您就不需要调用序列来找出号码,数据库会为您处理。但是让它工作有点棘手,因为您可能需要对数据库进行大量更改。

  • 在标识列上创建序列(您已经完成此操作)。
  • 创建触发器以在插入时自动调用序列。 http://www.oracle-base.com/articles/misc/autonumber-and-identity.php
  • 改变你的 Entity Framework 模型。我首先使用 EF Database,发现这篇文章解释了我需要更改模型以将表的标识列的属性设置为
    StoreGeneratedPattern="Identity"

  • Oracle entity in VS entity framework doesnt update the primary key in code
  • 但是我不喜欢每次从数据库刷新我的 EF 模型时都必须重新添加此更改的事实。双击 .edmx 文件,然后在数据库图中找到您的表,突出显示图中的标识列,然后在属性窗口中,将 StoreGeneratedPattern 值更改为 Identity。即使您更新 EF 模型,这也应该使其保持不变。
  • 关于.net - 如何在 .NET Entity Framework 中获取 Oracle 的下一个序列值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18260411/

    相关文章:

    .net - 当你使用 Task.Run 太多以至于线程池耗尽时会发生什么?

    c# - 如何在 EF Core 表达式中使用继承的属性?

    c# - Entity Framework Core 单个对象而不是列表

    c# - 为什么 FileInfo 对象的 Name 属性以 "~$"开头?

    c# - 如何在调用构造函数之前初始化 F# 中的字段?

    c# - 为什么 RijndaelManaged 和 AesCryptoServiceProvider 返回不同的结果?

    c# - .NET Core EF,何时避免异步数据库调用

    r - 使用 "Select * from <table_name>"、 'odbc' 包从 R 创建表时,'DBI' 无法在 Oracle 11g 中工作

    sql - Oracle - 如何使用 FAST REFRESH 和 JOINS 创建物化 View

    mysql - 需要将mysql group by query转为oracle