首页 新闻 会员 周边

EF 帮帮看下这什么情况

0
悬赏园豆:60 [已解决问题] 解决于 2015-01-26 09:23
using (var context = SingletonBase<DataAccess>.Instance.CreateDbContext())
            {
                context.Configuration.AutoDetectChangesEnabled = false;

                context.Configuration.LazyLoadingEnabled = false;
                var acStatus = activityStatus.FirstOrDefault(a => a.Code.Equals(statusCode, StringComparison.OrdinalIgnoreCase));
                
                var harvest = new Harvest
               {
                   ActivityStatusId = acStatus.Id,
               };
                context.Activities.Add(harvest);//harvest.ActivityStatus并未赋值
                //经调试Add之后此处harvest.ActivityStatus不为null 
                //后经修改acStatus在另外一个context中查询,Add之后正常为null
            }

请教下为什么会出现这种情况?

问题补充:
context.Configuration.AutoDetectChangesEnabled = false;

context.Configuration.LazyLoadingEnabled = false;

去掉这两句就好了

AutoDetectChangesEnabled:获取或设置一个值,该值指示是否通过 DbContext 和相关类的方法自动调用 DetectChanges() 方法。 默认值为 true。

LazyLoadingEnabled:获取或设置一个值,该值指示是否启用针对公开为导航属性的关系的延迟加载。 延迟加载在默认情况下处于启用状态。

 

但是上面我都设置为false的,求指导!

阳.咩咩的主页 阳.咩咩 | 初学一级 | 园豆:4
提问于:2015-01-22 15:59
< >
分享
最佳答案
0

如果 context.Configuration.AutoDetectChangesEnabled = true; , context.Activities.Add(harvest); 之后,EF会跟踪harvest的变化,如果harvest的属性值发生变化,在Commit时会进行数据库更新操作。

收获园豆:60
dudu | 高人七级 |园豆:31007 | 2015-01-22 16:52

但是context.Configuration.AutoDetectChangesEnabled=false的啊

阳.咩咩 | 园豆:4 (初学一级) | 2015-01-22 16:56

而且如你所说 ,我是不是可以理解为 ,AutoDetectChangesEnabled=true 时,Add(harvest)之后harvest.ActivityStatus!=null

同时谢谢你的解答。

阳.咩咩 | 园豆:4 (初学一级) | 2015-01-22 17:05

@yy_yang: ActivityStatus的类型是什么?

dudu | 园豆:31007 (高人七级) | 2015-01-22 17:09

@dudu: 

Harvest : Activity

Activity{public byte ActivityStatusId ;public virtual ActivityStatus ActivityStatus ;}

阳.咩咩 | 园豆:4 (初学一级) | 2015-01-22 17:17

@yy_yang: 是枚举类型?

dudu | 园豆:31007 (高人七级) | 2015-01-22 17:20

@dudu: 不是 ,就是一个类

阳.咩咩 | 园豆:4 (初学一级) | 2015-01-22 17:23

@yy_yang: 你把virtual去掉试试

dudu | 园豆:31007 (高人七级) | 2015-01-22 17:24

@dudu: 

  public class Activity
    {
        public byte ActivityStatusId;
        public virtual ActivityStatus ActivityStatus;
    }

    public class Harvest : Activity
    { 
        
    }

    public class ActivityStatus
    {
    
    }

是这么一个结构, 不好意思上面没说清楚

阳.咩咩 | 园豆:4 (初学一级) | 2015-01-22 17:29
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册