C# 如何使用EF Core Oracle生成和自动增加Id
我首先使用entity framework core 2代码在Oracle 11g中生成数据,实体提供者是dotConnect,我的POCO类如下:C# 如何使用EF Core Oracle生成和自动增加Id,c#,asp.net-web-api,code-first,dotconnect,ef-core-2.0,C#,Asp.net Web Api,Code First,Dotconnect,Ef Core 2.0,我首先使用entity framework core 2代码在Oracle 11g中生成数据,实体提供者是dotConnect,我的POCO类如下: public partial class Favoritepage { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public int Personnelid { get; set;
public partial class Favoritepage
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int Personnelid { get; set; }
public int Pageid { get; set; }
}
public partial class ModelContext : DbContext
{
public virtual DbSet<Favoritepage> Favoritepage { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.HasSequence<int>("S_FAVORITEPAGE", "SECURITY")
.StartsAt(1)
.IncrementsBy(20);
modelBuilder.Entity<Favoritepage>(entity =>
{
entity.ToTable("FAVORITEPAGE", "SECURITY");
entity.HasIndex(e => e.Id)
.HasName("PK_FAVORITEPAGE")
.IsUnique();
entity.Property(e => e.Id).HasColumnName("ID").ForOracleHasDefaultValueSql("S_FAVORITEPAGE.NEXTVAL");
});
}
}
我的DbContext如下所示:
public partial class Favoritepage
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int Id { get; set; }
public int Personnelid { get; set; }
public int Pageid { get; set; }
}
public partial class ModelContext : DbContext
{
public virtual DbSet<Favoritepage> Favoritepage { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.HasSequence<int>("S_FAVORITEPAGE", "SECURITY")
.StartsAt(1)
.IncrementsBy(20);
modelBuilder.Entity<Favoritepage>(entity =>
{
entity.ToTable("FAVORITEPAGE", "SECURITY");
entity.HasIndex(e => e.Id)
.HasName("PK_FAVORITEPAGE")
.IsUnique();
entity.Property(e => e.Id).HasColumnName("ID").ForOracleHasDefaultValueSql("S_FAVORITEPAGE.NEXTVAL");
});
}
}
它不起作用,并且像这样提升表达式ORA-01400无法将值NULL插入列“Id”
怎么了?因为Oracle 11g不支持序列或函数中的列默认值,所以唯一的方法是使用触发器
创建序列S_XXX;
创建或替换触发器T_XXX
插入前
关于XXX
每行
开始
如果(:NEW.ID这样对我有效
builder.Property(e=>e.Id).HasColumnName(“Id”)
.fororacleusequencehilo(“序列名称”);
您确定需要在DBContext中使用所有这些显式值吗?它似乎与您的实体定义冗余,而且正如我正确记得的那样,很多都是自动完成的。我知道这一点,我只是不知道问题出在哪里,所以我添加了所有这些定义。如果S\u FAVORITEPAGE.NEXTV对于ID
列,AL
设置为DEFAULT
。@Ivan Stoev设置S_FAVORITEPAGE。对于ID
列,NEXTVAL
设置为DEFAULT
无法,可能我的方法错误。这会创建触发器吗?