【问题标题】:EF7: Foreign Keys are not generated when adding to Database ContextEF7:添加到数据库上下文时不生成外键
【发布时间】:2015-07-16 07:25:36
【问题描述】:

我目前正在使用 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 迁移工具,这将创建带有 AspNetUsersPermissions 外键的 relUserPermissions 表。

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

【问题讨论】:

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


    【解决方案1】:

    要创建关系,您必须在两个表上都提供它,

    试试这个:

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

    在 Permissions 类中添加此属性

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

    【讨论】:

    • 我已经尝试过了,使用 ICollection 而不是 Ilist。不工作。不过,我同时找到了一种解决方法。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      如下图所示添加导航属性

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

      【讨论】:

        猜你喜欢
        • 2020-12-26
        • 1970-01-01
        • 1970-01-01
        • 2015-12-20
        • 1970-01-01
        • 2011-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多