【问题标题】:Entity Framework - Saving entity generates an Id but record isn't added to database实体框架 - 保存实体生成一个 Id 但记录未添加到数据库
【发布时间】:2016-06-24 11:21:12
【问题描述】:

我正在尝试使用以下代码使用实体框架插入新记录。但是,在 BuildRequest 类的 BuildRequest.Save() 方法中,当“插入”发生并且 db.Save() 完成时,会为 BuildRequest 正确生成 JobId(表明插入正在正确完成)记录未添加到数据库中。

当我签入 SQL 分析器时,插入尝试执行以下操作:

exec sp_executesql N'INSERT [dbo].[BuildQueue]([ApplicationId], [BuildReason])
VALUES (@0, @1)

SELECT [JobId]
FROM [dbo].[BuildQueue]
WHERE @@ROWCOUNT > 0 AND [JobId] = scope_identity()',N'@0 int,@1 tinyint,@0=5819,@1=0

这是我创建新“工作”的呼吁:

BuildRequest job = new BuildRequest(ApplicationId, Core.BuildReasons.NewApp);
job.Save()

它使用以下类:

public class BuildRequest
{
    private Data.BuildQueue _buildRequest;

    public BuildRequest(int applicationId, BuildReasons reason)
    {
        _buildRequest = new Data.BuildQueue();
        ApplicationId = applicationId;
        BuildReason = reason;
    }

    public int JobId
    {
        get { return _buildRequest.JobId; }
    }

    public int ApplicationId
    {
        get
        {
            return _buildRequest.ApplicationId;
        }
        set
        {
            _buildRequest.ApplicationId = value;
        }
    }

    public BuildReasons BuildReason
    {
        get
        {
            return (BuildReasons)_buildRequest.BuildReason;
        }
        set
        {
            _buildRequest.BuildReason = (byte)value;
        }
    }

    public int Save()
    {
        using (Core.Data.UnitOfWork db = new Data.UnitOfWork())
        {
            Data.BuildQueue buildRequest = db.BuildQueueRepository.Get(a => a.JobId == this.JobId).SingleOrDefault();
            if (buildRequest == null)//current build request doesn't already exist
            {
                db.BuildQueueRepository.Insert(_buildRequest);
            }
            else // we're editing an existing build request
            {
                db.BuildQueueRepository.Update(_buildRequest);
            }

            db.Save();
            // **At this point, _buildRequest has a JobId, but no record is added to the database
            return JobId;
        }
    }
}

到目前为止我检查过的内容:

  • 我创建的 'UnitOfWork' 对象 ('db') 已连接到正确的数据库(远程 SQL 服务器数据库)
  • db.BuildQueueRepository.Insert(...) 正确调用 dbSet.Add(entity);
  • db.Save() 正确调用 context.SaveChanges();
  • 在我的应用程序的其他地方存在使用相同通用 UnitOfWork 存储库的现有代码,它看起来与上面的代码几乎相同,并且运行良好

会发生什么?正常工作的代码有什么不同?

【问题讨论】:

    标签: sql-server entity-framework


    【解决方案1】:

    哇!如果新记录处于特定状态,则有一项工作可以将新记录从队列中取出。事实证明,这个特定的例程会立即设置该状态,并且正在输入记录,然后立即将其移动到另一个表中。

    【讨论】:

      猜你喜欢
      • 2017-07-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-26
      • 2016-08-11
      • 1970-01-01
      • 2013-06-30
      相关资源
      最近更新 更多