我目前在实体框架中遇到显式加载问题。 我在我的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。 任何人都知道为什么这不起作用?
如果有人知道一个很好的工作替代方案来序列化延迟加载的实体,我准备整合那个。