【发布时间】: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