2015-05-06 12 views
0

我目前正在使用实体框架7.0.0-beta3,并试图在两个表之间创建多对多关系。对于我使用的语法从The answer of this question,减去ICollections:EF7:添加到数据库上下文时不会生成外键

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仍然是。

回答

0

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

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

我已经试过了,用ICollection代替了Ilist。不工作。尽管如此,我发现了一个解决方法。 –