【问题标题】:Can't create DatabaseContext from service无法从服务创建 DatabaseContext
【发布时间】:2016-06-10 10:55:28
【问题描述】:

我有一个服务。

scheduler.Start();

IJobDetail job = JobBuilder.Create<ReportJob>()
           .WithIdentity("reportJob", "reportGroup")
           .Build();

ITrigger trigger = TriggerBuilder.Create()
           .WithIdentity("reportTrigger", "reportGroup")
           .StartNow()
           .WithCronSchedule("0 * * ? * Fri")
           .Build();

scheduler.ScheduleJob(job, trigger);

在 ReportJob 我有

 var repository = new StoreReportRepository();
 repository.GenerateReports();

在 GenerateReports 中我尝试访问 DatabaseContext

var db = new DatabaseContext()

我收到错误:

外键“FK_dbo.UserSession_dbo.User_UserId”引用无效 表'dbo.User'。无法创建约束或索引。见上 错误。

构造函数DatabaseContext():

    public ObjectContext Context
    {
        get {

            return (this as IObjectContextAdapter).ObjectContext;
        }
    }

    public DatabaseContext()
        : base("name=DatabaseContext")
    {
        this.Context.ContextOptions.LazyLoadingEnabled = true;
    }

我做错了什么? 谢谢

PS UserSession.cs

public class UserSession
{
    [Key]
    public Guid Id { get; set; }
    public Guid UserId { get; set; }
    public DateTime Expiration { get; set; }
}

【问题讨论】:

  • 查看您的错误 - 无效表 dbo.User。检查这张表,它是否真的存在。
  • @PeterSmith 我有这张桌子。并且方法 GenerateReports 有效,但前提是我从控制器运行它
  • @PeterSmith 原因可能是 asp.net 身份吗?
  • 您可以发布 dbml 表关联吗?如果您不在调度服务中对用户进行身份验证,猜想您不需要该关联
  • 我可以建议你尝试将你的连接字符串指向一个空的 Db 并让实体框架为你创建数据库结构,然后测试你是否仍然得到这个错误..可能是现有的数据库结构与 DbContext 的预期不匹配?

标签: c# entity-framework windows-services asp.net-identity-2


【解决方案1】:

我找到了适合我的解决方案。 问题在于 Windows 服务是从错误的帐户运行的。所以它创建了新的数据库。我更改了帐户,一切正常。

在服务中找到您的服务->右键单击->属性->选项卡登录->输入您的帐户名和密码。

【讨论】: