我遇到了Entity Framework的奇怪行为.EF生成的DbContext对象返回与数据库中的实际数据不同的数据.
请考虑以下数据库架构:

Letter 数据:
Id Value LanguageId
------- ------- ----------
1 A 1
2 A 2
3 B 1
4 B 2
Run Code Online (Sandbox Code Playgroud)
Language 数据:
Id Value
------- -------
1 English
2 Russian
Run Code Online (Sandbox Code Playgroud)
我也有以下简单的观点LetterLanguageView.请注意,它使用LEFT JOIN子句,因为Letter.LanguageId可能是NULL:
SELECT dbo.Letter.Value as Letter, dbo.Language.Value as Language
FROM dbo.Letter
LEFT JOIN dbo.Language ON dbo.Letter.LanguageId = dbo.Language.Id
Run Code Online (Sandbox Code Playgroud)
这个视图的结果非常简单:
Letter Language
------- --------
A English
A Russian
B English
B Russian
Run Code Online (Sandbox Code Playgroud)
但是,当我从Entity Framework使用此视图时,我得到以下结果:

如您所见,该Language物业是错误的,根本没有俄语.
如果您想知道,这是用于读取此数据的代码段: …
我刚刚在我的MVC网站上安装了Hangfire包.我创建了一个Startup类
[assembly: OwinStartup(typeof(Website.Startup))]
namespace Website
{
public partial class Startup
{
public void Configuration(IAppBuilder app)
{
Hangfire.ConfigureHangfire(app);
Hangfire.InitializeJobs();
}
}
}
Run Code Online (Sandbox Code Playgroud)
和一个Hangfire课程
public class Hangfire
{
public static void ConfigureHangfire(IAppBuilder app)
{
app.UseHangfire(config =>
{
config.UseSqlServerStorage("DefaultConnection");
config.UseServer();
config.UseAuthorizationFilters();
});
}
public static void InitializeJobs()
{
RecurringJob.AddOrUpdate<CurrencyRatesJob>(j => j.Execute(), "* * * * *");
}
}
Run Code Online (Sandbox Code Playgroud)
另外,我在一个单独的类库中创建了一个新工作
public class CurrencyRatesJob
{
private readonly IBudgetsRepository budgetsRepository;
public CurrencyRatesJob(IBudgetsRepository budgetsRepository)
{
this.budgetsRepository = budgetsRepository;
}
public void Execute()
{
try
{
var budgets …Run Code Online (Sandbox Code Playgroud)