简体   繁体   English

实体框架在保存时抛出Null条目错误,C#

[英]Entity Framework throwing Null entry error at Saving, C#

I am working on Entity Framework 6 and repositories setup to do crud operations. 我正在使用Entity Framework 6和存储库设置来执行Crud操作。 I am trying to insert record in one of the table and getting error for null entries even duo it is not. 我正在尝试在表之一中插入记录,并且即使不是,也会出现空条目错误。

{"Cannot insert the value NULL into column 'UI_ID', table 'Blackpool_BPM.dbo.COURSE_INSTANCE'; column does not allow nulls. INSERT fails.\r\nThe statement has been terminated."}

在此处输入图片说明

The connection to database is correct as I can read data with no problem 与数据库的连接正确,因为我可以毫无问题地读取数据

At Generic Repository, getting data correctly, just before Save() 在通用存储库中,在Save()之前正确获取数据

在此处输入图片说明

Table Structure 表结构

在此处输入图片说明

Class Model 类模型

 [Table("COURSE_INSTANCE")]
public class BIZCourseInstanceEntity
{
    [Key]
    public int UI_ID { get; set; }

    public string UnitInstanceCode { get; set; }

    public string FESLongDescription { get; set; }

    public string FESShortDescription { get; set; }

    public string FullDescription { get; set; }

    public string OwningOrganisationCode { get; set; }

    public int? OwningOrganisationID { get; set; }

    public string TopicCode { get; set; }

    public string UnitCategory { get; set; }

    public string UnitCode { get; set; }

    public string FESQualificationType { get; set; }

    public int? SCHOOLS { get; set; }

    public int? MARKETING_GROUPS { get; set; }
}

Repository 知识库

 public class BIZCourseInstanceRepository : GenericRepository<BIZCourseInstanceEntity>
{
    public BIZCourseInstanceRepository() { }

    public BIZCourseInstanceRepository(DbContext dbContext)
        :base(dbContext)
    { }
}

Unit of work class 工作单元类别

  public class BIZ_UOF : IDisposable
{
    private BIZDbContext _BIZDbContextObject = new BIZDbContext();

    protected BIZCourseInstanceRepository _BIZCourseInstanceRepository;

 public BIZCourseInstanceRepository BIZCourseInstanceRepository
    {
        get
        {
            if (this._BIZCourseInstanceRepository == null)
            {
                this._BIZCourseInstanceRepository = new BIZCourseInstanceRepository(_BIZDbContextObject);
            }

            return _BIZCourseInstanceRepository;
        }
    }
    /////

   public void Save()
    {
        _BIZDbContextObject.Database.Log = s => System.Diagnostics.Debug.WriteLine(s);

        _BIZDbContextObject.SaveChanges();
    }

    private bool disposed = false;

    protected virtual void Dispose(bool disposing)
    {
        if (!this.disposed)
        {
            if (disposing)
            {
                _BIZDbContextObject.Dispose();
            }
        }
        this.disposed = true;
    }

    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }

DbContext 的DbContext

public class BIZDbContext : BaseContext<BIZDbContext>
{
    public BIZDbContext() : base("_DbContext")
    { }

    public DbSet<BIZCourseInstanceEntity> BIZ_CourseInstance { get; set; }     
}

Generic Repository CRUD 通用存储库CRUD

 public void InsertEntity(TEntity obj)
    {
        _DbSet.Add(obj);
    }

Function class where Error is generating at Save() 在Save()处生成错误的函数类

  public void InsertCourseInstance()
    {
        BIZCourseInstanceEntity BIZCourseInstanceEntityObject = null;

        BIZCourseInstanceEntityObject = new BIZCourseInstanceEntity
        {
            UI_ID = 999999,
            UnitInstanceCode = "KZ999999",
            FESLongDescription = "LONG",
            FESShortDescription = "SHORT",
            FullDescription = "FULL",
            OwningOrganisationCode = "E",
            OwningOrganisationID = 155,
            TopicCode = "04.1",
            UnitCategory = "04",
            UnitCode = "HE-G", 
            FESQualificationType = null,
            SCHOOLS = 5,
            MARKETING_GROUPS = 44

        };

        using (var _uow = new BIZ_UOF())
        {
            _uow.BIZCourseInstanceRepository.InsertEntity(BIZCourseInstanceEntityObject);

            _uow.Save();
        }
    }

You need to tell Entity Framework that your ID is an identity field. 您需要告诉Entity Framework您的ID是一个身份字段。 If it isn't set up as that in the database, then you need to do that. 如果未在数据库中进行设置,则需要这样做。 Otherwise, you'll need to query for the next available ID, and then hope you don't collide with another request trying to save something at the same time. 否则,您将需要查询下一个可用的ID,然后希望您不会与尝试同时保存内容的另一个请求发生冲突。

[Table("COURSE_INSTANCE")]
public class BIZCourseInstanceEntity
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int UI_ID { get; set; }
    ...
}

If you absolutely have to work without any sort of database generated options for your Primary Key, you can instead use the DatabaseGeneratedOption.None value of the enum. 如果绝对必须在没有任何种类的主键数据库生成选项的情况下工作,则可以改用枚举的DatabaseGeneratedOption.None值。 This should be avoided to prevent collisions on your PK, but the option does exist. 应该避免这种情况,以防止在PK上发生冲突,但是该选项确实存在。

I have found answer, the problem was in my database I am require to provide the Primary key which in my case is UI_ID but in my model I haven't define DatabaseGeneredOption.None, hence throwing error, Thanks for Krillgar guiding me 我找到了答案,问题出在数据库中,我需要提供主键,在我的情况下是UI_ID,但在我的模型中我没有定义DatabaseGeneredOption.None,因此抛出错误,感谢Krillgar指导我

here is updated model 这是更新的型号

[Table("COURSE_INSTANCE")]
public class BIZCourseInstanceEntity
{
    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.None)]
    public int UI_ID { get; set; }

    [StringLength(255)]
    public string UnitInstanceCode { get; set; }

    [StringLength(255)]
    public string FESLongDescription { get; set; }

    [StringLength(255)]
    public string FESShortDescription { get; set; }

    [StringLength(255)]
    public string FullDescription { get; set; }

    [StringLength(255)]
    public string OwningOrganisationCode { get; set; }

    public int? OwningOrganisationID { get; set; }

    [StringLength(255)]
    public string TopicCode { get; set; }

    [StringLength(255)]
    public string UnitCategory { get; set; }

    [StringLength(255)]
    public string UnitCode { get; set; }

    [StringLength(50)]
    public string FESQualificationType { get; set; }

    public int? SCHOOLS { get; set; }

    public int? MARKETING_GROUPS { get; set; }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM