使用EF Core IdentityContext和DbContext进行订单管理

时间:2018-02-05 13:28:07

标签: asp.net-core asp.net-identity ef-core-2.0

我正在上ASP MVC核心2.创建一个电子商务网站我继承了用户从与用户数据的工作IdentityUser IdentityDbContext,并继承的上下文和继承从不同的上下文{{1用于处理产品和订单等。

现在,我想将订单或购物车链接到特定用户,并且无法理解如何在订单表中引用用户,因为他们处于不同的上下文中。我也使用EF创建的默认guid作为两个表中的主键。

我应该抛弃DbContext并仅使用DbContext吗?这样做会导致身份和其他常见非异步方法中的异步方法出现问题。

以下是我的课程中的一些代码片段

IdentityDbContext

订购类

using Microsoft.AspNetCore.Identity;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace shophe1.Models
{
    public enum Gender { Male, Female, Other}
    public class User : IdentityUser
    {
        public string FullName { get; set; }
        public Gender Gender { get; set; }
        public string ReferralID { get; set; }
        public DateTime RegistrationDateTime { get; set; }

        public string ActivationDateTime { get; set; }

        public string UserType { get; set; }
        public Wallet Wallet {get;set;}


        public virtual ICollection<UserBankDetail> BankDetails { get; set; }
        public virtual ICollection<UserAddress> AddressDetails { get; set; }
       //public ShoppingCart Cart { get; set; }
        //public ICollection<Order> Orders { get; set; }

    }
}

问题是,如果我为了模型添加用户和用户类订单的集合,两种情况下弄混和迁移时,所有的用户和产品相关型号得到相同的迁移杵我是否使用的DbContext或IdentityContext在迁移--context选项。这是因为用户和订单现在都是相互关联的。

请建议。

1 个答案:

答案 0 :(得分:0)

IdentityDbContext继承您的上下文。理想情况下,每个数据库应该有一个上下文 - 特别是如果要将实体相互关联。

如果您确实需要单独的数据库,以便Identity表驻留在一个数据库中,而您的应用程序表驻留在另一个数据库中,那么您将无法直接将实体相互关联。但是,您仍然可以创建伪外键,只需将特定用户的ID存储在其中一个实体的列中。然后,您只需要使用此id在其他上下文上发出单独的查询以手动获取用户。例如:

var order = await appContext.Orders.FindAsync(orderId);
var user = await identityContext.Users.FindAsync(order.UserId);