【发布时间】:2016-12-15 12:36:51
【问题描述】:
我正在研究 Entity Framework 6 和存储库设置以执行 crud 操作。我正在尝试在其中一个表中插入记录,并在空条目中出现错误,即使它不是。
{"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."}
与数据库的连接是正确的,因为我可以毫无问题地读取数据
在通用存储库中,在 Save() 之前正确获取数据
表结构
类模型
[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; }
}
存储库
public class BIZCourseInstanceRepository : GenericRepository<BIZCourseInstanceEntity>
{
public BIZCourseInstanceRepository() { }
public BIZCourseInstanceRepository(DbContext dbContext)
:base(dbContext)
{ }
}
工作单元类
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);
}
数据库上下文
public class BIZDbContext : BaseContext<BIZDbContext>
{
public BIZDbContext() : base("_DbContext")
{ }
public DbSet<BIZCourseInstanceEntity> BIZ_CourseInstance { get; set; }
}
通用存储库 CRUD
public void InsertEntity(TEntity obj)
{
_DbSet.Add(obj);
}
在 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();
}
}
【问题讨论】:
-
是的,它可以为空
-
只是为了好玩,如果你排除了 UI_ID,只是不要将其设置为 999999,删除该行。
-
哦,对不起,没读好。
-
您在
BIZDbContext或BaseContext的OnModelCreating方法中是否有任何其他映射,例如Fluent Mapping,您指定UI_ID应该是Identity或@987654339 @ 类型?将其从生成的INSERTsql 语句中排除并解释异常的设置。 -
^--- (继续) -- 我知道你想强制插入,但如果模型设置为根据上面的错误设置排除它并且数据库配置为不生成值,那么一旦您尝试从 EF 插入该表,就会发生异常。然后修复是更正模型映射并删除
Identity或Comptuted标志。
标签: c# entity-framework-6 repository-pattern unit-of-work