使用实体框架查询时,不会加载域模型部分类属性

时间:2017-06-23 15:46:19

标签: c# entity-framework lazy-loading

我使用entityframework生成的类作为域模型层POCO类 对于每个类,我创建一个PartialClass以包含一些属性或方法。

例如:

namespace APA.Model.Models
{
    using System;
    using System.Collections.Generic;
    using System.ComponentModel.DataAnnotations;

    [MetadataType(typeof(APAProjectMetaData))]
     public  partial class APAProject : BaseModel<APAProject>
    {
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
        public APAProject()
        {
            this.APAProjectComponents = new HashSet<APAProjectComponent>();
            this.APARoles = new HashSet<APARole>();
            this.APASolutionUser_APAProject = new HashSet<APASolutionUser_APAProject>();
        }

        public System.Guid ID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public System.Guid APAAuthenticationTypeID { get; set; }
        public byte[] RowVersion { get; set; }

        public virtual APAAuthenticationType APAAuthenticationType { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<APAProjectComponent> APAProjectComponents { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<APARole> APARoles { get; set; }
        [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Usage", "CA2227:CollectionPropertiesShouldBeReadOnly")]
        public virtual ICollection<APASolutionUser_APAProject> APASolutionUser_APAProject { get; set; }
    }
}

,部分类是:

namespace APA.Model.Models
{
    public partial class APAProject : IAggregateRoot
    {
        [NotMapped]
        public string APAAuthenticationTypeName
        {
            get { return this.APAAuthenticationType.Name; }
        }
    }
}

我使用以下方法查询数据库:

query.OrderBy("ID").Skip(PageIndex * PageSize).Take(PageSize).AsEnumerable<T>();

其中query是:IQueryable<T>并由以下方法启动:

public IQueryable<T> GetQuery()
        {
            string entityName = GetEntitySetName<T>();
            return DataContextFactory.GetDataContext().CreateQuery<T>(entityName);
        }

我还设置了:ContextOptions.LazyLoadingEnabled = true;

除非我向数据库插入记录并且在提交uow之后,我尝试运行查询以获取gridview的新数据源,但是部分类属性APAAuthenticationTypeName的值不会加载对于新插入的记录。

正如您在监视窗口的屏幕截图中看到的那样,新插入的记录是resultView [7],其类型为APA.Model.Models.APAProject,这与以前不同类型的现有记录不同:System.Data.Entity.DynammicProxies_... 。 我不知道这里发生了什么! 我想知道为什么属性值加载以及如何解决它?

提前致谢

enter image description here

0 个答案:

没有答案