我有实体框架 4.1 的小问题。
有图像DTO接口:
public interface IImage : IDtoBase
{
string FullFilePath { get; set; }
int Width { get; set; }
int Heigth { get; set; }
long ImageTypeId { get; set; }
IImageType Type { get; set; }
}
有配置上下文的代码:
// where TContext : DbContext, new()
private TInterface Invoke(Func<TContext, TInterface> callback)
{
using (var context = new TContext())
{
context.Configuration.AutoDetectChangesEnabled = true;
context.Configuration.LazyLoadingEnabled = true;
context.Configuration.ProxyCreationEnabled = true;
context.Configuration.ValidateOnSaveEnabled = true;
context.Database.Connection.Open();
return callback.Invoke(context);
}
}
有代码可以获取所需的 DTO 项目:
public TInterface Get(long id)
{
return Invoke(
context =>
{
TDto dto = context.Set<TDto>().FirstOrDefault(x => (x.Id == id));
return dto.Convert<TDto, TInterface>();
}
);
}
如果我设置context.Configuration.LazyLoadingEnabled = false
,则图像 DTO 的“类型”属性为空(我认为,没关系)。
如果context.Configuration.LazyLoadingEnabled
具有“true”值,则图像 DTO 的“Type”属性在“using”语句中具有正确的值,但该属性在处置上下文后处置 - “ObjectContext 实例已处置,不能再用于操作需要连接。”
即图像 DTO 存在/未处置,但其“类型”属性已处置。
任何人都可以提供任何解决方案 - 不要处置“类型”属性(我想使用“使用”语句而不是“处置”模式)?