实体框架 - 显式加载对象

时间:2014-07-24 12:52:53

标签: c# entity-framework

我目前在实体框架中遇到显式加载问题。 我在我的datacontext中禁用了代理创建和延迟加载。

 public DataContext()
     : base("")
 {
     Configuration.ProxyCreationEnabled = false;
     Configuration.LazyLoadingEnabled = false;
 }

这已经完成,因为我需要能够序列化我的实体框架对象,这在使用虚拟属性时我无法做到,因为这会创建一个虚拟属性。

我想检索实体'ContentType':

[Table("T_CONTENT_TYPES")]
public class ContentType : Entity
{
    #region Properties

    /// <summary>
    ///     Gets or sets the name of the content type.
    /// </summary>
    [Required]
    [Column(Order = 1)]
    public string Name { get; set; }

    /// <summary>
    ///     Gets or sets the <see cref="Folder"/> in which this item belongs.
    ///     If this field is empty, it means that this item is stored in no particular folder, which means it's stored in the root.
    /// </summary>
    [Column(Order = 100)]
    public Folder Folder { get; set; }

    #endregion
}

这是通过使用此代码完成的:

var contentType = UnitOfWork.ContentTypeRepository.GetById(Id);

如您所见,我的实体引用了一个文件夹。自LazyLoading&amp;代理创建被禁用,我使用以下代码来检索文件夹:

((DataContext) UnitOfWork.DataContext).Entry(contentType).Reference(x => x.Folder).Load();

我的完整方法是:

 public ContentType GetById(int Id)
 {
     var contentType = UnitOfWork.ContentTypeRepository.GetById(Id);

     ((DataContext) UnitOfWork.DataContext).Entry(contentType).Reference(x => x.Folder).Load();

     return contentType;
 }

GetById方法如下所示:

public TEntity GetById(int id)
{
    if (GetEntityById != null)
    { GetEntityById(this, new EventArgs()); }

    var returnData = dbSet.FirstOrDefault(x => x.Id == id);

    if (GetEntityByIdFound != null)
    { GetEntityByIdFound(this, new EventArgs()); }

    return returnData;
}

但是,“Folder”属性仍为null。 任何人都知道为什么这不起作用?

如果有人知道一个很好的工作替代方案来序列化延迟加载的实体,我准备整合那个。

0 个答案:

没有答案