2011-01-23 67 views
0

我有这个类:实体未创建问题

public partial class User 
{ 
    private MyEntities _entities; 

    public User() 
    { 
    } 

    public User(MyEntities entities) 
    { 
     _entities = entities; 
    } 

    public IEnumerable<User> GetUsersRegisteredNewsletter() 
    { 
     return (from u in _entities.Users 
       where u.Subscribe_Newsletter == true 
       select u); 
    } 

    public IEnumerable<CallTimeOption> GetUserCallTimeOptions 
    { 
     get 
     { 
      //_entities = new LighthouseEntities(); 
      // if we uncomment the line above it works  

      var query = from a in _entities.Users.Include("CallTimeOptions") 
         where a.Id == this.Id 
         && a.CallTimeOptions.Any() 
         select a.CallTimeOptions; 

      return query.SelectMany(i => i); 

     } 

    } 
} 

}

现在,当我打电话GetUserCallTimeOptions它抛出一个错误

MyEntities _entities = new MyEntities(); 
    User user = new User(_entities); 
    IEnumerable<User> u = user.GetUsersRegisteredNewsletter(); 

    foreach (var a in u) 
    { 

      foreach (var y in user.GetUserCallTimeOptions) 
       Response.Write(y.Text); 
    } 
“不设置到对象的实例对象引用”

但如果我取消注释GetUserCAllTimeOptions上的这一行,那么它的工作原理如下:

_entities = new LighthouseEntities(); 

不需要再次创建_entities,不应该这样工作吗?

回答

1

您的方法GetUsersRegisteredNewsletter()返回使用默认构造函数创建的用户实例,该构造函数不初始化_entities。

编辑:一个可能是更好的方式来做到这一切将是用户内未持有MyEntities实例可言的,也有“使用”的条款创建MyEntities:

using (MyEntities entities = new MyEntities()) { 
    // .... do everything, use only the above declared variable 'entities' 
} 
+0

@sinelaw ,你的意思是删除“私人MyEntities_entities”;来自用户类? – user441365 2011-01-23 16:04:08