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

时间:2015-05-06 08:56:02

标签: c# linq asp.net-core-mvc entity-framework-core

我目前正在使用Entity Framework 7.0.0-beta3,并尝试在两个表之间创建多对多关系。为此,我使用The answer of this question中的语法,减去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指的是AspNetUsers表。使用kpm迁移工具,这将创建relUserPermissions表,其中包含AspNetUsersPermissions的外键。

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

3 个答案:

答案 0 :(得分:0)

要创建关系,您必须在表格

上提供

试试这个:

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; }
}

在权限类

中添加此属性
public Ilist<relUserPermisions> relUserPermission {get; set;}

答案 1 :(得分:0)

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

答案 2 :(得分:0)

添加导航属性,如下图所示

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