簡體   English   中英

延遲加載不在Entity Framework中。 (未創建代理)

[英]Lazy Loading not working in Entity Framework. (Proxy not being created)

我似乎無法讓Lazy Loading工作,即使我有LazyLoadingEnabled = true和ProxyCreationEnabled = true。 我已經遵循了指南中的所有內容。 我在調試器中運行了我的指南,發現沒有為我正在檢索的實體創建代理。 顯然,沒有代理,延遲加載將無法正常工作。 問題是,為什么沒有代理被創建,即使(我相信)我遵守了所有規則。 這是模型:

using Core.Auditing;
using Core.Common;
using Core.Domain.Models.CustomFields;
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;

namespace Core.Domain.Models {

    [Table("Order")]
    public class Order : BaseEntity, IAuditableEntity {

        #region Constructors

        public Order(): base() {
        }

        #endregion

        #region Properties

        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public int OrderID { get; set; }

        public int? EventID { get; set; }

        public DateTime? PostedDate { get; set; }

        public DateTime? ShippedDate { get; set; }

        [MaxLength(50)]
        [Index(IsUnique = false)]
        public string DisplayID { get; set; }
        public decimal OrderTotal { get; set; }
        public decimal Subtotal { get; set; }
        [NotMapped]
        public decimal ShippingPrice {
            get {
                return ShippingOverridePrice ?? ShippingMethodPrice;
            }
            set
            {
                ShippingPrice = value;
            }
        }
        public decimal ShippingMethodPrice { get; set; }
        public decimal? ShippingOverridePrice { get; set; }
        [NotMapped]
        public decimal HandlingPrice {
            get {
                return HandlingOverridePrice ?? HandlingMethodPrice;
            }
            set
            {
                HandlingPrice = value;
            }
        }
        public decimal HandlingMethodPrice { get; set; }
        public decimal? HandlingOverridePrice { get; set; }
        public decimal TaxTotal { get; set; }
        public decimal TaxableTotal { get; set; }
        public decimal DiscountTotal { get; set; }

        [NotMapped]
        public decimal TotalPayments {
            get {
                return Payments?.Sum(p => p.Amount - p.RefundedAmount) ?? 0;
            }
            set
            {
                TotalPayments = value;
            }
        }

        [NotMapped]
        public decimal BalanceDue {
            get {
                return (Subtotal + ShippingPrice + HandlingPrice + TaxTotal) - (DiscountTotal + TotalPayments);
            }
            set
            {
                BalanceDue = value;
            }
        }

        [ForeignKey("OrderAddress")]
        public int? OrderAddressID { get; set; }

        [ForeignKey("ShoppingCart")]
        public int ShoppingCartID { get; set; }

        [ForeignKey("HandlingMethod")]
        public int? HandlingMethodID { get; set; }

        [ForeignKey("ShippingMethod")]
        public int? ShippingMethodID { get; set; }

        [Required]
        [DefaultValue(1)]
        public OrderStatusEnum OrderStatusID { get; set; }

        [Required]
        [DefaultValue(1)]
        public OrderPaymentStatusEnum OrderPaymentStatusID { get; set; }

        [Required]
        [DateTimeKind(DateTimeKind.Utc)]
        public DateTime OrderDate { get; set; }

        public bool Locked { get; set; }

        public bool Commissionable { get; set; }

        public int? OriginalOrderID { get; set; }

        [ForeignKey("OrderOwner")]
        public int? PersonID { get; set; }

        [ForeignKey("CommissionOwner")]
        public int? CommissionPersonID { get; set; }

        [ForeignKey("PersonPaymentMethod")]
        public int? LegalEntityPaymentMethodID { get; set; }

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

        public decimal ExchangeRate { get; set; } = (decimal)1.0;

        public int? BusinessUnitID { get; set; }

        [NotMapped]
        public bool IsHostOrder {
            get {
                if (Event != null && Event.PersonID == PersonID) {
                    return true;
                }
                else {
                    return false;
                }
            }
            set
            {
                IsHostOrder = value;
            }
        }
        #endregion

        #region Relationships

        public virtual BusinessUnit BusinessUnit { get; set; }

        [ForeignKey("OrderAddressID")]
        public virtual Address OrderAddress { get; set; }

        [ForeignKey("ShoppingCartID")]
        public virtual ShoppingCart ShoppingCart { get; set; }

        [ForeignKey("HandlingMethodID")]
        public virtual HandlingMethod HandlingMethod { get; set; }

        [ForeignKey("EventID")]
        public virtual Event Event { get; set; }

        [ForeignKey("ShippingMethodID")]
        public virtual ShippingMethod ShippingMethod { get; set; }

        public virtual List<OrderVolumeTotal> OrderVolumeTotals { get; set; }
        public virtual List<Shipment> Shipments { get; set; }

        public virtual List<Return> Returns { get; set; }

        [ForeignKey("OrderStatusID")]
        public virtual OrderStatus OrderStatus { get; set; }

        [ForeignKey("OrderPaymentStatusID")]
        public virtual OrderPaymentStatus OrderPaymentStatus { get; set; }

        [ForeignKey("PersonID")]
        public virtual Person OrderOwner { get; set; }

        [ForeignKey("CommissionPersonID")]
        public virtual Person CommissionOwner { get; set; }

        [ForeignKey("LegalEntityPaymentMethodID")]
        public virtual LegalEntityPaymentMethod PersonPaymentMethod { get; set; }

        public virtual List<OrderLine> OrderLines { get; set; }

        public virtual List<OrderNote> OrderNotes { get;set;}


        public virtual List<Invoice> Invoices { get; set;}

        [ForeignKey("CurrencyTypeID")]
        public virtual CurrencyType CurrencyType { get; set; }

        public virtual List<Payment> Payments { get; set;}

        public decimal ConsultantPrice { get; set; }

        public virtual List<CustomFieldValueOrder> CustomFieldValues { get; set; }

        public virtual List<SubscriptionRunOrderAssociation> SubscriptionRunAssociations { get; set; }

        #endregion

    }
}

namespace Core.Domain.Models.Mapping {
    using System.Data.Entity.ModelConfiguration;

    public class OrderMap : EntityTypeConfiguration<Order> {
        public OrderMap() {
            //            HasMany(ol => ol.OrderLines)
            //           .WithRequired();

            HasMany(a => a.Shipments)
                .WithMany(b => b.Orders)
                .Map(t => t.MapLeftKey("OrderID")
                .MapRightKey("ShipmentID")
                .ToTable("OrderShipment"));

            HasMany(a => a.Payments)
                .WithOptional(b => b.TargetOrder)
                .HasForeignKey(t => t.TargetOrderID);

            HasMany(a => a.Returns)
                .WithRequired(b => b.Order)
                .HasForeignKey(t => t.OrderID);

        }
    }
}

我是如何嘗試接收實體的:

        var result = new BaseResult<OrderCenterDTO>();
        result.ResultCode = MethodResultCode.Success;

        db.Configuration.LazyLoadingEnabled = true;
        db.Configuration.ProxyCreationEnabled = true;

        var TranslationLanguageID = UserHelper.GetTranslationLanguageID();

        var orderResult = db.Orders
                            .FirstOrDefault(o => o.DisplayID == displayID);

Context.tt文件未正確創建。您可以通過powershell正確刪除ef引用,然后再次使用power shell安裝相同的軟件包。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM