【发布时间】:2018-04-18 18:17:32
【问题描述】:
我正在向已经有效的服务添加一个新方法。 HangFire 作业使用这种新方法。这就是我将它添加到Startup.cs 的Configure 方法中的方法
// Create the daily tasks
RecurringJob.AddOrUpdate<ITaskService>(x => x.CreateRecurringTasks(), Cron.Daily(0));
这是服务的构造函数。请注意,我在开始时创建了数据库上下文,因此在控制器中使用它时不会出现事务问题。
public TaskService(
IMapper mapper,
INotificationService notificationService,
IConfiguration configuration
)
{
var opts = new DbContextOptionsBuilder<ProjectDbContext>();
opts.UseSqlServer(configuration.GetConnectionString("DefaultConnection"));
_dbContext = new ProjectDbContext(opts.Options);
_configuration = configuration;
_mapper = mapper;
_notificationService = notificationService;
}
我的问题是下面的方法不会在数据库中添加行。
void LogRepeatedTask(long copiedTaskId, long originalTaskId) {
_dbContext.TaskRepeatLogs.Add(new Data.Models.TaskRepeatLog
{
CopiedTaskId = copiedTaskId,
OriginalTaskId = originalTaskId,
UtcDate = DateTime.UtcNow
});
_dbContext.SaveChanges();
}
这是模型。如您所见,它非常简单:
public class TaskRepeatLog
{
public long Id { get; set; }
public long OriginalTaskId { get; set; }
public long CopiedTaskId { get; set; }
public DateTime UtcDate { get; set; }
}
这是ProjectDbContext中的DbSet:
public DbSet<TaskRepeatLog> TaskRepeatLogs { get; set; }
对我来说,一切似乎都很简单,但我不明白为什么该方法不起作用。甚至这个 DbSet 上的选择似乎也无法正常工作,我不明白我做错了什么。你能帮帮我吗?
谢谢
【问题讨论】:
-
你确定'LogRepeatedTask'被命中了吗?我在您显示的代码中没有看到任何引用。
-
@RuardvanElburg 是的。使用它的方法是巨大的,它与问题无关。但是,是的,它被击中了,我在调试时看到它被击中。
-
你检查了连接字符串吗?由于您使用的是新实例,因此它可能正在查看不同的数据库。
-
@RuardvanElburg 是的,我做到了。该服务已在许多地方使用,并且大多数方法都适用于数据库。即使是新方法也有效。只有这种方法似乎是问题所在,实际上是这个新实体,因为我手动将条目添加到 DB 并且 _dbContext.TaskRepeatLogs.First(),例如,不会返回任何内容
-
您使用的是 EF6?而且该方法从未插入一行,不在调试中,也不在生产中?你能在它周围添加一个try-catch吗?也许有一些潜在的错误导致了这种行为。
标签: c# asp.net entity-framework asp.net-web-api hangfire