EF6:无法识别对db上下文所做的更改

时间:2018-06-14 18:16:24

标签: c# entity-framework

我的数据库上下文无法识别对特定表的上下文所做的更改。在上下文中定义的其他表上的CRUD操作正常工作。

对于无法识别上下文更新的表,我能够查询没有问题的数据,但任何更改上下文的尝试都没有效果。

我已经确认没有更新命令通过SQL事件探查器来到SQL Server数据库,并且我在update方法中添加了代码,以通过ChangeTracker上的HasChanges方法检查上下文对象的状态,该方法始终指示false。

    public async Task<IEnumerable<ScheduleEntry>> UpdateProductionScheduleAsync(ScheduleEntry entry)
    {
        Log.TraceInfo(String.Format("{0} updating CNC Production Schedule Entry", entry.UserName));
        ScheduleEntry result = _context.ProductionSchedule.SingleOrDefault(x => x.Id == entry.Id);
        if (result != null)
        {
            try
            {
                result = entry;

                //BUGBUG: Remove this debugging code
                bool changesMade = _context.ChangeTracker.HasChanges();

                int changeCount = await _context.SaveChangesAsync();
            }
            catch (Exception ex)
            {
                Log.TraceError(Log.WarnId.SqlException, String.Format("UpdateProductionScheduleAsync Request Failed: Error:{0}", ex));
            }
        }

        return await GetAllScheduleEntriesAsync();
    }

我没有先使用向导或代码,我只是手动滚动了DB Context类...

[DbConfigurationType(typeof(CodeConfig))]
public class CNCDataContext : DbContext, IDatabaseContext
{
    public CNCDataContext()
        : base("name=CNCProductionData")
    {
        Database.SetInitializer<CNCDataContext>(null);
    }

    public DbSet<RawData> RawData { get; set; }
    public DbSet<ScheduleEntry> ProductionSchedule { get; set; }

    public class CodeConfig : DbConfiguration
    {
        public CodeConfig()
        {
            SetDefaultConnectionFactory(new System.Data.Entity.Infrastructure.SqlConnectionFactory());
            SetProviderServices("System.Data.SqlClient",
                System.Data.Entity.SqlServer.SqlProviderServices.Instance);
        }
    }

上下文不会识别的实体定义是......

[Table("ProductionSchedule")]
public class ScheduleEntry
{
    public ScheduleEntry()
    {

    }

    [Key]
    public int Id { get; set; }
    public DateTime DatePartsProduced { get; set; }
    public int Hours { get; set; }
    public string MachNum { get; set; }
    public DateTime StartDate { get; set; }
    public string PartNum { get; set; }
    public int QtyToRun { get; set; }
    public int QtyRan { get; set; }
    public int QtyLost { get; set; }
    public int RedLot { get; set; }
    public int Scrap { get; set; }
    public int Rework { get; set; }
    public int QtyLeftToRun { get; set; }
    public decimal RatePerHour { get; set; }
    public int ShiftsReq { get; set; }
    public string Priority { get; set; }
    public string NextSetup { get; set; }
    public int NextQtyToRun { get; set; }
    public DateTime RefreshTime { get; set; }
    public string UserName { get; set; }
}

如何调试上下文以确定此实体的问题?

0 个答案:

没有答案