EF7:添加到数据库上下文时不生成外键

EF7: Foreign Keys are not generated when adding to Database Context

我目前正在使用 Entity Framework 7.0.0-beta3 并且正在尝试在两个表之间创建多对多关系。为此,我使用 中的语法,减去 ICollections:

public class Permissions
{
    public Guid PermissionId { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}
public class relUserPermissions
{
    public string UserId { get; set; }
    public ApplicationUser User { get; set; }
    public Guid PermissionId { get; set; }
    public Permissions Permission { get; set; }
}

ApplicationUser指的是AspNetUsersTable。使用 kpm 迁移工具,这将创建带有 AspNetUsersPermissions.

外键的 relUserPermissions Table

当我试图通过 LINQ 访问它时,我需要使用 public DbSet<relUserPermissions> relUserPermission { get; set; } 将关系添加到数据库上下文。但是一旦我添加该行,就不再生成 Permissions 的外键,AspNetUsers 的外键仍然是。

要创建关系,您必须同时在 table、

上提供它

试试这个:

public class Permissions
{
    public Guid PermissionId { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
    public IList<relUserPermissions> relUserPermission {get; set;}
}
public class relUserPermissions
{
    public string UserId { get; set; }
    public ApplicationUser User { get; set; }
    public Guid PermissionId { get; set; }
    public Permissions Permission { get; set; }
}

在权限中添加此 属性 class

public Ilist<relUserPermisions> relUserPermission {get; set;}

虽然不得不这样做有点烦人,但现在我可以通过将 Permissions.PermissionId 重命名为 Permissions.Id 来解决问题。这不是一个很好的解决方案,我不知道为什么这会影响任何东西(我之前通过 Fluent API 添加 PermissionId 作为键),但它正在工作。

添加导航属性如下图

public ApplicationUser User { get; set; }
public Guid PermissionId { get; set; }
public Permissions Permission { get; set; }
public virtual Permissions Permission { get; set; }