代码之家  ›  专栏  ›  技术社区  ›  Jet813

包括来自不同DbContext的模型

  •  0
  • Jet813  · 技术社区  · 6 年前

    我不知道如何实现两个dbcontext之间的关系。PurchaseOrderDbContext是一种代码优先的方法&AgencyDbContext是一个现有的数据库。如何基于PurchaseOrder DivisionId包含AgencyDbContext中的“部门”?

    采购订单模型

       namespace Website.Models.PurchaseOrders
      {
        public class PurchaseOrder
        {
        public int ID { get; set; }
        public DateTime OrderDate { get; set; } 
        public string Name { get; set; }     
        public int DivisionId { get; set; }
        public int StatusID { get; set; }    
        public Agency.Division Division { get; set; }
        } 
      }
    

        namespace Website.Models.Agency
    {
        public class Division
        {
                public int DivisionId { get; set; }
                public string DivisionName { get; set; }
                public string DivisionShortName { get; set; }
                public string DivisionAbbrev { get; set; }
                public int? DivisionDirectorEmpId { get; set; }
    
        }
    }
    

    代理数据库上下文

        namespace Website.Models.Agency
    {
        public class AgencyDbContext : DbContext
        {
    
    
            public Agency DbContext(DbContextOptions<AgencyDbContext> options) : base(options)
            {
    
            }
    
            public virtual DbSet<Division> Division { get; set; }
            public virtual DbSet<Section> Section { get; set; }
    
    
            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
    
            }
        }
    }
    

    PurchaseOrderDbContext

      namespace Website.Models.PurchaseOrders
    {
        public class PurchaseOrderDbContext : DbContext
        {
    
            public PurchaseOrderDbContext(DbContextOptions<PurchaseOrderDbContext> options) : base(options)
            {}
            public DbSet<Status> Statuses { get; set; }
            public DbSet<PurchaseOrder> PurchaseOrder { get; set; }
    
            protected override void OnModelCreating(ModelBuilder modelBuilder)
            {
            }
    
        }
    
        }
    

                     var purchaseOrder = _context.PurchaseOrder
                                        .Include(p => p.Division)
                                        .Include(p => p.Status)
                                        .OrderByDescending(p => p.OrderDate);
    

    0 回复  |  直到 6 年前
        1
  •  0
  •   Yehor Androsov    6 年前

    可能唯一的解决方法是对要查找的项的第一个上下文进行查询,然后填充 Division

    public class PurchaseOrderService
    {
        private readonly PurchaseOrderDbContext purchaseOrderDbContext;
        private readonly AgencyDbContext agencyDbContext;
    
        public PurchaseOrderService(PurchaseOrderDbContext purchaseOrderDbContext,
            AgencyDbContext agencyDbContext)
        {
            this.purchaseOrderDbContext = purchaseOrderDbContext;
            this.agencyDbContext = agencyDbContext;
        }
    
        public PurchaseOrder Get(int id)
        {
            var purchaseOrder = purchaseOrderDbContext.PurchaseOrder.FirstOrDefault(x => x.ID == id);
    
            if (purchaseOrder == null)
            {
                return null;
            }
    
            purchaseOrder.Division = agencyDbContext.Division.FirstOrDefault(x => x.DivisionId == purchaseOrder.DivisionId);
    
            return purchaseOrder;
        }
    }