c# - Entity Framework 不生成 ApplicationUser 外键

标签 c# asp.net asp.net-mvc entity-framework foreign-keys

注意:对于这个问题,我稍微简化了模型。

我正在开发 ASP.NET Core MVC 应用程序(使用 Entity Framework Core)。我有三个模型。我有一个 ApplicationUser (从 IdentityUser 扩展),我有一个 Activity 模型,我有一个“SignUp”模型,该模型具有事件的外键和 ApplicationUser 的外键。至少,这是我的想法。问题是, Entity Framework 将 Activity FK 识别为 FK,但不将应用程序用户识别为 FK。这只是成为数据库中的另一个 int,没有任何 FK 约束。

我已经尝试了很多在互联网上找到的东西,但我无法让它工作。这是我目前拥有的(为了清晰起见缩短了):

事件:

public class Activity
{
    public Activity()
    {
        SignUps = new HashSet<SignUp>();
    }

    public int ActivityID { get; set; }

    [Required]
    [StringLength(50)]
    [Display(Name = "Naam")]
    public string Name { get; set; }

    public virtual ICollection<SignUp> SignUps { get; set; }
}

应用程序用户:

public class ApplicationUser : IdentityUser
{
    public ApplicationUser()
    {

        Activities = new HashSet<Activity>();
    }

    [Required]
    [Display(Name = "Voornaam")]
    public string FirstName { get; set; }

    [Required]
    [Display(Name = "Achternaam")]
    public string LastName { get; set; }

    public virtual ICollection<Activity> Activities { get; set; }
}

注册:

public class SignUp
{
    public int SignUpID { get; set; }

    [Required]
    public int ActivityID { get; set; }

    [ForeignKey("ApplicationUser")]
    public int ApplicationUserID { get; set; }

    [Required]
    public string Status { get; set; }
}

注意:我首先没有 [ForeignKey] 属性(就像 Activity 一样),但它在那里是因为我试图让它工作。

正如我上面所说,SignUp 中的 Activity FK 工作正常,而 Applicationuser FK 则不行。 Entity Framework 只是在数据库中生成一个 int,没有任何 FK 约束,并且在搭建 CRUD 页面时,它也不会被识别为 FK。

我对 ASP.net MVC 和 EF 很陌生,我感觉我忽略了一些非常简单的东西。捂脸瞬间来了?

谢谢!

最佳答案

Activity关系之所以有效,是因为其中涉及导航属性。 Activity有一个 ICollection<SignUp> ,因此 EF 绑定(bind)到 ActivityIDSignUp维护该集合。 ApplicationUser 没有做任何类似的事情。 。您只有一个名为 ApplicationUserID 的属性; EF 不会对此做任何事情,因为它不知道它应该

只需添加一个导航属性即可:

[ForeignKey("ApplicationUser")]
public int ApplicationUserID { get; set; }
public ApplicationUser ApplicationUser { get; set; }

编辑

实际上,在仔细查看您的代码后,我认为您可能刚刚搞砸了 ICollection<Activity>ApplicationUserApplicationUser 之间没有直接关系和Activity 。这种关系来自 SignUp ,它基本上是一个带有有效负载的 M2M。因此,您应该得到以下内容:

public class ApplicationUser : IdentityUser
{
    public ApplicationUser()
    {

        Activities = new HashSet<Activity>();
    }

    [Required]
    [Display(Name = "Voornaam")]
    public string FirstName { get; set; }

    [Required]
    [Display(Name = "Achternaam")]
    public string LastName { get; set; }

    public virtual ICollection<SignUp> SignUps { get; set; }
}

然后,它的功能将与您的 Activity 完全相同目前关系确实如此。

关于c# - Entity Framework 不生成 ApplicationUser 外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43761801/

相关文章:

c# - 验证检查在存储库模式中的什么位置?

C#/EmguCV - 将上传的 HttpPostedFileBase 转换为 Emgu.CV.Mat

jquery - 通过 POST 调用支持 AJAX 的 Web 服务可以工作,但使用 GET 时它总是返回 xml

c# - Cache-Control HTTP header 可以正常工作

javascript - 在 ASP.Net MVC 中使用 ajax 通过 Id 检查单选按钮

c# - DateTime 销毁 View

C# 同义枚举处理

c# - 否则还是返回?

.net - 发布 ASP.NET 应用程序时,是否应该在 Visual Studio 配置管理器中将构建类型更改为发布?

c# - 在 ASP.net MVC 中显示没有 Controller 或操作的文件夹中的 View