Mal*_*are 31 c# entity-framework
当我想要实际的实体类时,我遇到了实体框架返回代理的问题.我第一次运行我的代码时,一切运行正常(没有代理),但每次迭代之后,我的一个DbSets总是返回代理而不是实际类型.
我在每次迭代后处理上下文,所以我不明白为什么第一次通过它工作,并且每次都没有.
我的代码在这一行失败了.我的所有POCO都设置了Table属性,但因为它返回了一个代理类,所以没有table属性.
TableAttribute attrib = (TableAttribute)attributes.Single();
Run Code Online (Sandbox Code Playgroud)
DbContext中有一些幕后静态魔法在我摧毁对象后生活吗?
我使用以下内容将对象移动到内存中
MajorClasses = ctx.MajorClasses.ToArray();
Run Code Online (Sandbox Code Playgroud)
我也试过了
MajorClasses = ctx.MajorClasses.AsNoTracking().ToArray();
Run Code Online (Sandbox Code Playgroud)
在我的OnModelCreating中,我有以下设置
base.Configuration.ProxyCreationEnabled = false;
base.Configuration.LazyLoadingEnabled = false;
Run Code Online (Sandbox Code Playgroud)
cad*_*ll0 47
您可以设置ObjectContext.ContextOptions.ProxyCreationEnabled为false.这将阻止您使用一些EF的花哨功能,如延迟加载,我相信更改跟踪.
就您的应用而言,它应该能够像代表它们所代表的类型一样对待代理.你有特定的问题吗?
编辑
我们有一些代码需要POCO类型而不是代理类型,我们执行以下操作来检测当前类型是否是代理.
if (entityType.BaseType != null && entityType.Namespace == "System.Data.Entity.DynamicProxies")
{
entityType = entityType.BaseType;
}
Run Code Online (Sandbox Code Playgroud)
小智 6
要在Entity Framework 5中关闭代理创建,您可以使用以下方法,
_dbContext.Configuration.ProxyCreationEnabled = false;
Run Code Online (Sandbox Code Playgroud)
在使用上下文提取数据之前,只需设置此属性一次.
| 归档时间: |
|
| 查看次数: |
29574 次 |
| 最近记录: |