Oracle Entity Framework自增?

3

我在考虑在我的应用程序中使用ODP.NET实体框架,我想知道如何处理自动递增。在不使用EF的情况下使用ODP.NET时,我使用序列和sequence.next来进行插入操作。 但是,我应该如何处理EF?

谢谢!

3个回答

2

我使用了序列和触发器 - 这似乎是唯一可行的解决方案。


0
通常,在表的 BEFORE INSERT 触发器中检索序列的 NEXT_VAL(请参见示例)。
在 EF 中,将 PK 列的 StoreGeneratedPattern 设置为 Identity(MSDN)。

谢谢您的回答。我已经尝试过了,如果我将其设置为身份验证(identity),在插入时ID列会得到“空值(null)”。 - maephisto
@maesphisto 请检查是否配置了关键列:modelBuilder.Entity<Student>().HasKey(t => t.ID); - fsbflavio

0
在EntityFramework 6中,您可以将模型配置为DatabaseGeneratedOption为Identity并设置关键列:
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        //Configure default schema
        modelBuilder.HasDefaultSchema("Admin");

        //Map pk in table
        modelBuilder.Entity<Student>().HasKey(t => t.ID_CERT);
        modelBuilder.Entity<Student>().Property(t => t.ID_CERT)
            .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
    }

然后更新你的数据库:

update-database

这将自动为您创建序列和触发器。

如果您需要一些自定义触发器,请查看此处的一些示例,并使用触发器创建一个空迁移:

public partial class SomeMigration : DbMigration
{
    public override void Up()
    {
        Sql("create or replace trigger TR_CUSTOM ... ");
    }

    public override void Down()
    {
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接