我正在上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选项。这是因为用户和订单现在都是相互关联的。
请建议。
答案 0 :(得分:0)
从IdentityDbContext
继承您的上下文。理想情况下,每个数据库应该有一个上下文 - 特别是如果要将实体相互关联。
如果您确实需要单独的数据库,以便Identity表驻留在一个数据库中,而您的应用程序表驻留在另一个数据库中,那么您将无法直接将实体相互关联。但是,您仍然可以创建伪外键,只需将特定用户的ID存储在其中一个实体的列中。然后,您只需要使用此id在其他上下文上发出单独的查询以手动获取用户。例如:
var order = await appContext.Orders.FindAsync(orderId);
var user = await identityContext.Users.FindAsync(order.UserId);