iCa*_*arp 7 .net entity-framework sequence oracle11g nextval
我有一个web api post方法,在我的Oracle数据库中的表中插入一个新行.我遇到了表的主键,这是一个序列值.我如何my_primary_key_seq.nextval在Entity Framework中做?目前此代码有效,但当通过旧的.net webform插入新行时,它将违反PK唯一约束,该webform使用序列下一个值作为下一个主键.
decimal nextPK = context.FORMPPs.OrderByDescending(p => p.PPID).FirstOrDefault().PPID + 1;
item.PPID = nextPK;
context.FORMPPs.Add(item);
int result = context.SaveChanges();
Run Code Online (Sandbox Code Playgroud)
小智 6
我解决这个问题的方法是使用原始 SQL 查询从序列中选择一个新值。
IE
decimal nextPK = context.Database.SqlQuery<decimal>("SELECT my_primary_key_seq.nextval FROM dual").First();
Run Code Online (Sandbox Code Playgroud)
然后将此值分配给新对象,然后再将其添加到上下文中。
我遇到了同样的问题,并在本网站和Oracle的帮助下解决了这个问题.我假设您正在使用Database First,因为您提到另一个遗留应用程序使用相同的数据库.
我必须做一些事情.就像Daniel Gabriel所提到的那样,如果你允许Oracle管理身份,你不需要调用序列来找出数字,数据库会为你处理它.但要实现这一点有点棘手,因为您可能需要对数据库进行一系列更改.
在标识列上创建序列(您已经完成此操作).
创建一个触发器以在插入时自动调用序列. http://www.oracle-base.com/articles/misc/autonumber-and-identity.php
更改您的实体框架模型.我正在使用EF Database First,并发现这篇文章说明我需要更改模型以将表的标识列的属性设置为
StoreGeneratedPattern="Identity"
| 归档时间: |
|
| 查看次数: |
10394 次 |
| 最近记录: |