Visual Studio 2017 PMC添加迁移不起作用,没有错误

时间:2017-10-24 15:17:58

标签: asp.net-core visual-studio-2017 ef-migrations

我创建了我的项目,并且能够添加一些迁移并使用PMC相应地更新数据库。

今天;但是,我似乎根本无法添加迁移。

以下是发生的事情:

PM> add-migration EventEntities
Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
      User profile is available. Using 'C:\Users\MyUserAccount\AppData\Local\ASP.NET\DataProtection-Keys' as key repository and Windows DPAPI to encrypt keys at rest.
PM> 

注意,没有错误。它简单地写了“用户配置文件是有用的......”并且在挂了大约30秒之后,就像什么都没发生一样,我的迁移没有被创建...

为什么添加迁移突然停止工作?如何才能显示某种错误消息?

我尝试了几种解决方案,包括:

  • $error[0].Exception.StackTrace但它什么也没输出。
  • update-package -reinstall尝试重新安装所有套餐,但对上述问题没有影响。
  • 以管理员身份运行Visual Studio 2017,但它对上述问题没有影响。

更新:在我的Startup.cs文件中注释掉一些代码并重新运行PMC add-migration命令后,我开始收到以下错误:

System.InvalidOperationException: The convention invocations have reached the recursion limit. This is likely an issue in EF Core, please report it.

看起来这是由我的新实体关于相关实体和外键设置的方式引起的问题。我将向后工作,看看能否找到具体问题。

2 个答案:

答案 0 :(得分:1)

我已确定我的问题是由相关实体关系引起的。我的解决方案是指定外键如下:

public class Event
{
    public Guid Id { get; set; }
    public string Name { get; set; }

    [ForeignKey("EventId")]
    public virtual ICollection<EventHostAssociation> Hosts { get; set; }
}

public class EventHostAssociation
{
    public Guid EventId { get; set; }
    public string UserId { get; set; }

    public virtual Event Event { get; set; }
    public virtual ApplicationUser User { get; set; }
}

public class ApplicationUser : IdentityUser
{
    [ForeignKey("UserId")]
    public virtual ICollection<EventHostAssociation> EventHosts { get; set; }
}

最后,在我的ApplicationDbContext.cs文件中,我指定了我的复合键:

    protected override void OnModelCreating(ModelBuilder builder)
    {
        base.OnModelCreating(builder);

        builder.Entity<EventHostAssociation>().HasKey(c => new { c.EventId, c.UserId });
    }

这里已经讨论过这个问题了:https://github.com/aspnet/EntityFrameworkCore/issues/9265

答案 1 :(得分:1)

EventHostAssociation表应具有Event的外键引用 您应该在EventHostAssociation表中添加此行

[ForeignKey("EventAsso")
public int EventId {get;set;}
public virtual EventHostAssociation EventAsso{get;set:}