我正在将数据从一个旧数据库迁移到新数据库。新的数据库是用EF核心代码创建的-首先使用Fluent API。所有表都已成功迁移,期望一个表。在这个表上,当我想在数据库中保存一些更改时,我会得到一个错误,即“拒绝”字段为空,即使是非空字段。

该字段为整数类型。
此外,我还做了一些SQL分析,我发现由于某些原因,在Insert中缺少这个字段。

任何帮助,以了解为什么会发生这种情况,我将感激。
更新:
public class Entries
{
public Guid Id { get; set; }
public DateTime CreateDateTime { get; set; }
public int CartonBoxId { get; set; }
public CartonBoxes CartonBox { get; set; }
public string Status { get; set; }
public string UserId { get; set; }
public ApplicationUser User { get; set; }
public int Accepted { get; set; }
public int Rejected { get; set; }
public DateTime? UpdateDateTime { get; set; }
public int MasterCodeId { get; set; }
public MasterCodes MasterCode { get; set; }
public int SubCodeId { get; set; }
public SubCodes SubCode { get; set; }
public int AqlId { get; set; }
public Aqls Aql { get; set; }
}
public DbSet<Fashions> Fashions { get; set; }
public DbSet<AqlVersions> AqlVersions { get; set; }
public DbSet<Aqls> Aqls { get; set; }
public DbSet<MasterCodes> MasterCodes { get; set; }
public DbSet<SubCodes> SubCodes { get; set; }
public DbSet<CartonBoxes> CartonBoxes { get; set; }
public DbSet<Entries> Entries { get; set; }
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<ApplicationUser>(entity =>
{
entity.HasMany(x => x.Entries)
.WithOne(x => x.User)
.HasForeignKey(x => x.UserId);
});
builder.Entity<Fashions>(entity =>
{
entity.HasKey(x => x.Id);
entity.Property(x => x.Id)
.ValueGeneratedOnAdd();
entity.Property(x => x.Name)
.HasMaxLength(50)
.IsRequired();
entity.HasMany(x => x.Aqls)
.WithOne(x => x.Fashion)
.HasForeignKey(x => x.FashionId);
});
builder.Entity<AqlVersions>(entity =>
{
entity.Property(x => x.Id).ValueGeneratedOnAdd();
entity.HasKey(x => x.Id);
entity.Property(x => x.Name)
.IsRequired()
.HasMaxLength(50);
entity.HasIndex(x => x.Name).IsUnique();
entity.HasMany(x => x.Aqls)
.WithOne(x => x.AqlVer)
.HasForeignKey(x => x.AqlVerId);
});
builder.Entity<Aqls>(entity =>
{
entity.Property(x => x.Id).ValueGeneratedOnAdd();
entity.HasKey(x => x.Id);
entity.HasMany(x => x.Entries)
.WithOne(x => x.Aql)
.HasForeignKey(x => x.AqlId);
});
builder.Entity<MasterCodes>(entity =>
{
entity.Property(x => x.Id).ValueGeneratedOnAdd();
entity.HasKey(x => x.Id);
entity.Property(x => x.Code)
.IsRequired()
.HasMaxLength(50);
entity.Property(x => x.Eng)
.HasMaxLength(50);
entity.Property(x => x.Srb)
.HasMaxLength(50);
entity.HasMany(x => x.SubCodes)
.WithOne(x => x.MasterCodes)
.HasForeignKey(x => x.MasterCodeId)
.OnDelete(DeleteBehavior.Cascade);
entity.HasMany(x => x.Entries)
.WithOne(x => x.MasterCode)
.HasForeignKey(x => x.MasterCodeId);
});
builder.Entity<SubCodes>(entity =>
{
entity.Property(x => x.Id).ValueGeneratedOnAdd();
entity.HasKey(x => x.Id);
entity.Property(x => x.Code)
.IsRequired()
.HasMaxLength(50);
entity.Property(x => x.Eng)
.HasMaxLength(50);
entity.Property(x => x.Srb)
.HasMaxLength(50);
entity.HasMany(x => x.Entries)
.WithOne(x => x.SubCode)
.HasForeignKey(x => x.SubCodeId)
.OnDelete(DeleteBehavior.Restrict);
});
builder.Entity<CartonBoxes>(entity =>
{
entity.HasKey(x => x.Id);
entity.Property(x => x.Id).ValueGeneratedOnAdd();
entity.Property(x => x.CartonBox)
.IsRequired()
.HasMaxLength(50);
entity.Property(x => x.ManuallyStatus)
.HasMaxLength(20);
entity.Property(x => x.Sku)
.HasMaxLength(20);
entity.Property(x => x.Po)
.HasMaxLength(50);
entity.HasMany(x => x.Entries)
.WithOne(x => x.CartonBox)
.HasForeignKey(x => x.CartonBoxId);
});
builder.Entity<Entries>(entity =>
{
entity.HasKey(x => x.Id);
entity.Property(x => x.Id)
.ValueGeneratedOnAdd();
entity.Property(x => x.Status)
.HasMaxLength(50);
entity.Property(x => x.UpdateDateTime)
.IsRequired(false);
entity.Property(x => x.Accepted)
.HasDefaultValue();
entity.Property(x => x.Rejected)
.HasDefaultValue();
entity.Property(x => x.MasterCodeId)
.HasDefaultValue(null);
entity.Property(x => x.SubCodeId)
.HasDefaultValue(null);
});
base.OnModelCreating(builder);发布于 2018-03-21 09:59:49
问题是HasDefaultValue
entity.Property(x => x.Rejected)
.HasDefaultValue();当属性值等于指定的默认值时,EF将不包括在带有HasDefaultValue标记的insert命令属性中(在您的示例中为0)。
我建议完全不使用HasDefaultValue / HasDefaultValueSql,除非数据库表中的对应列具有默认表达式。如果您不想要类似的惊喜,也可以从其他属性中删除它。
请参阅文档的默认值部分。
https://stackoverflow.com/questions/49401028
复制相似问题