如何在Servicestack Ormlite中使用Oracle序列

时间:2014-03-27 22:25:30

标签: oracle ormlite-servicestack

我在Oracle中有一个表和一个序列:

CREATE TABLE USER1.TABLE1 ( 
    ID                   number(9,0)  NOT NULL,
    FIELD_1              nvarchar2(64)  NOT NULL,
    FIELD_2              nvarchar2(256),
    CONSTRAINT PK_TABLE1 PRIMARY KEY ( ID )
) ;

CREATE SEQUENCE USER1.SEQ_TABLE1 START WITH 1 ;

我还有一个用C#定义的类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ServiceStack.DataAnnotations;

namespace OraTest
{
    public class Table1
    {
        [AutoIncrement]
        public int      Id { get; set; }
        public string   Field_1 { get; set; }
        public string   Field_2 { get; set; }
    }
}

我还有一个DTO类,一个服务类和数据存储库类,我有一个数据插入代码:

...
using (var db = DbConnectionFactory.OpenDbConnection())
{
  db.Insert(data);
}
...

当我尝试插入记录时,我得到“ORA-02289:序列不存在”。

如何告诉OrmLite使用哪个序列?

1 个答案:

答案 0 :(得分:0)

你获得ORA-02289的原因是因为没有信息在哪里查找序列。

您需要做的就是在定义数据模型类的类的顶部添加[Sequence()]属性。如果您有一个数据表TABLE1和Oracle数据库中定义的相应序列SEQ_TABLE1,那么您的示例将是:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using ServiceStack.DataAnnotations;

namespace OraTest
{
    public class Table1
    {
        [AutoIncrement]
        [Sequence("SEQ_TABLE1")]
        public int      Id { get; set; }
        public string   Field_1 { get; set; }
        public string   Field_2 { get; set; }
    }
}

现在应该使用定义的序列将新记录添加到Oracle表中。