【问题标题】:Add foreign key to ApplicationUser from entity classes in another project从另一个项目中的实体类向 ApplicationUser 添加外键
【发布时间】:2015-09-28 17:20:31
【问题描述】:

我目前有一个设置,其中我的 EF6 数据库模型位于名为 Entities 的项目中。但是我有另一个名为 Infrastructure 的项目,它定义了一个继承自 IdentityIUser(标准 MVC 身份验证模块)的 ApplicationUser 类。

基础设施项目了解实体,但反之则不然。我的网络项目只知道基础设施

我想要做的是从我的实体项目中定义的几个类/表中添加一些外键引用到 ApplicationUser。我可以添加一个字段,但它只是一个标准的字符串字段,没有外键约束。

这可以使用实体框架吗?我尝试过使用 Fluent 注释,但不知道该怎么做。

我的迁移和 DBContext 都在 Infrastructure 项目中定义。

项目设置是:

Web
|
 Infrastructure
 | 
  Entities

我的网络项目不了解实体项目,因为我在基础设施中有一个中间层,它为我从实体模型映射。

【问题讨论】:

    标签: asp.net-mvc entity-framework-6 asp.net-mvc-5.2


    【解决方案1】:

    您可以将多余的 ApplicationUser、DbSet、config 等添加到您的 Entities 项目中并在那里设置关系。然后你可以使用这样的代码:

    var infrastructureUser= await UserManager.FindByIdAsync(User.Identity.GetUserId());
    var entityUser = db.Users.Find(infrastructureUser.UserID);
    myEntity.UserProfile = entityUser;
    db.MyEntity.Add(myEntity);
    await db.SaveChangesAsync();
    return RedirectToAction("Index");
    

    您也可以考虑解耦 EF,但这需要大量工作。 https://jinishbhardwaj.wordpress.com/2014/07/16/decoupling-asp-net-identity-2-0-from-entity-framework-in-mvc5-part-1/

    【讨论】:

    • 干杯。我没有想到这一点。那会尝试为我刚刚放入的新虚拟实体创建新的迁移吗?
    • 不记得是不是这样,但您可以注释掉 Up() 代码或只进行无更改迁移以使模型匹配:Add-Migration CreateUsers –IgnoreChanges
    • 您好,我对 MVC 很陌生,我正在尝试针对我完全相同的情况实施此解决方案。您能否详细说明创建这样的“冗余”类?
    • 当然。最简单的方法是让您的 App 上下文从 IdentityDbContext 继承。如果将它们分开,您可以添加一个冗余的 User 类(或其他)并将其映射到 AspNetUsers 表,然后从您的应用程序上下文类中对其进行引用。您需要添加一个 DbSet 并使用属性或流畅的代码指示键和字段长度等。
    • 我理解这个想法,但是我在实施方面有点不知所措。你能提供一些伪代码来说明吗?我认为我理解了您原始答案中的代码,而且我的实体项目中似乎会有一个重复的用户 ID 表。这是正确的吗?
    猜你喜欢
    • 2021-02-25
    • 1970-01-01
    • 1970-01-01
    • 2017-10-01
    • 2022-11-21
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多