如何使用实体框架使用序列在 Oracle 中插入标识值

Kje*_*sen 4 c# oracle entity-framework oracle-manageddataaccess

在 Oracle 数据库中,它的 ID 列定义为数字:

在此处输入图片说明

...以及表的相应序列...:

在此处输入图片说明

如何确保 ID 列获得序列中的下一个值?

using (var db = new MyOracleDb()){
    var user= new User(){ first_name = 'Abe', last_name = 'Lincoln'};
    //Do something here with the sequence and set the ID?
    db.User.Add(user);
    db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

我正在使用最新的 Oracle.ManagedDataAccess 和 Oracle.ManagedDataAccess.EntityFramework + EF6x。

gil*_*hal 5

这不是 EF 问题,因为 oracle 中没有自动增量。您将不得不手动获取序列值,或者创建一个触发器来为您设置它。

更新

为了获得序列值,您有两个选择 - 创建一个存储过程,返回值 - 或创建一个调用原始 SQL 的 .Net 函数(实际上不必在函数中,它只是更简单)这个:

Database.SqlQuery<int>("SELECT SEQ_SOMESEQ.NEXTVAL FROM dual");

我个人对 oracle 函数和 EF 有很多问题,所以我会使用原始 sql。