gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 11:54:01 24 4
gpt4 key购买 nike

我有一个 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/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com