2015-12-22 49 views
-1

我在asp.net 4.6上使用VS'15。“对象未设置为对象实例”使用在一个实例中工作的代码,在另一个实例中不起作用

我也建模在发现了N层设计后,我的应用程序:

Implementing a generic data access layer using Entity Framework

我可以使用代码时,基于用户的代码返回从用户表但是返回的数据,来自另一个表的数据,我得到一个空返回。

我BLL代码工作:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using Library.DataAccessLayer; 
using Library.Model; 

namespace Library.BusinessLogicLayer 
{ 
    public interface IBusinessLogicLayer_User 
    { 
     IList<UsersModel> GetAllUsers(); 
     UsersModel GetUserByAapNetUserID(string _UserID); 
     void UpdateUser(params UsersModel[] _UserModel); 
    } 

    public class BusinessLogicLayer_User : IBusinessLogicLayer_User 
    { 
     private readonly IUsersRepository _UsersRepository; 

     public BusinessLogicLayer_User() 
     { 
      _UsersRepository = new UsersRepository(); 
     } 

     public BusinessLogicLayer_User(IUsersRepository userRepository) 
     { 
      _UsersRepository = userRepository; 
     } 

     public IList<UsersModel> GetAllUsers() 
     { 
      return _UsersRepository.GetAll(); 
     } 

     public UsersModel GetUserByAapNetUserID(string _UserID) 
     { 
      return _UsersRepository.GetSingle(u => u.AspNetUserID.Equals(_UserID)); 
     } 

     public void UpdateUser(params UsersModel[] _UsersModel) 
     { 
      _UsersRepository.Update(_UsersModel); 
     } 
    } 
} 

我BLL的代码,不工作:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Threading.Tasks; 
using Library.DataAccessLayer; 
using Library.Model; 

namespace Library.BusinessLogicLayer 
{ 
    public interface IBusinessLogicLayer_AreaSecurity 
    { 
     AreaSecurityModel GetAreaSecurityByUserID(string _AspNetUserID); 
     void AddAreaSecurity(params AreaSecurityModel[] _AreaSecurityModel); 
     void UpdateAreaSecurity(params AreaSecurityModel[] _AreaSecurityModel); 

     IList<AreaSecurityModel> GetAllAreaSecurity(); 
    } 

    public class BusinessLogicLayer_AreaSecurity : IBusinessLogicLayer_AreaSecurity 
    { 
     private readonly IAreaSecurityRepository _AreaSecurityRepository; 

     public BusinessLogicLayer_AreaSecurity() 
     { 
      _AreaSecurityRepository = new AreaSecurityRepository(); 
     } 

     public BusinessLogicLayer_AreaSecurity(IAreaSecurityRepository areaSecurityRepository) 
     { 
      _AreaSecurityRepository = areaSecurityRepository; 
     } 

     public void AddAreaSecurity(params AreaSecurityModel[] _AreaSecurityModel) 
     { 
      _AreaSecurityRepository.Add(_AreaSecurityModel); 
     } 

     public IList<AreaSecurityModel> GetAllAreaSecurity() 
     { 
      return _AreaSecurityRepository.GetAll(); 
     } 

     public AreaSecurityModel GetAreaSecurityByUserID(string _AspNetUserID) 
     { 
      return _AreaSecurityRepository.GetSingle(r => r.AspNetUserID.Equals(_AspNetUserID)); 
     } 

     public void UpdateAreaSecurity(params AreaSecurityModel[] _AreaSecurityModel) 
     { 
      _AreaSecurityRepository.Update(_AreaSecurityModel); 
     } 
    } 
} 

这里是正在调用该工作和不工作的东西代码:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using Library.BusinessLogicLayer; 
using Library.Model; 


namespace IdahoFalls9thWardBulletin.Controllers 
{ 
    public class ApplicationBaseController : Controller 
    { 
     protected override void OnActionExecuted(ActionExecutedContext filterContext) 
     { 
      if (User != null) 
      { 
       var context = new ApplicationDbContext(); 
       var username = User.Identity.Name; 

       if (!string.IsNullOrEmpty(username)) 
       { 
        var user = context.Users.SingleOrDefault(u => u.UserName == username); 

        BusinessLogicLayer_User _BusinessLogicLayer_User = new BusinessLogicLayer_User(); 
        var UserDetails = _BusinessLogicLayer_User.GetUserByAapNetUserID(user.Id); 
        ViewData.Add("FirstName", UserDetails.FirstName); 

        BusinessLogicLayer_AreaSecurity _BusinessLogicLayer_AreaSecurity = new BusinessLogicLayer_AreaSecurity(); 
        AreaSecurityModel _AreaSecurityModel = _BusinessLogicLayer_AreaSecurity 
         .GetAllAreaSecurity() 
         .ToList() 
         .FirstOrDefault(); 
        ViewData.Add("AreaSecurity", _AreaSecurityModel); 
       } 
      } 
      base.OnActionExecuted(filterContext); 
     } 
     public ApplicationBaseController() 
     { 
     } 
    } 
} 

我不明白的是,当我做_BusinessLogicLayer_AreaSecurity.GetAllAreaSecurity().ToList().FirstOrDefault()它确实返回t他列出所有记录。

但是,当我做_BusinessLogicLayer_AreaSecurity.GetAllAreaSecurity().GetAreaSecurityByUserID(user.Id)它返回空值。

我不知道我在这里失踪。这基本上是我第一次尝试使用MVC代码。

+6

[什么是'NullReferenceException'和我该如何解决它?](http://stackoverflow.com/q/4660142/447156) –

+0

@SonerGönül,这对于'NullReferenceException'很好,但它没有解释为什么在一个实例中应该返回数据的代码是为一件事而不是另一件事做的。 –

+0

它不返回任何内容,因为linq表达式不匹配。这就是你必须检查一个错误的地方,很可能是一个逻辑问题。 – SBI

回答

0

我很惭愧地说,问题是我的安全表的数据库被设置为Guid而不是字符串。