2014-09-24 39 views
0

我学习ASP从Pro Asp.Net MVC5,当我添加第二个DB和一流的解决方案,我得到的错误,每当我在EFDbContext添加DbSet同时加载客户或产品页面。空引用例外ASP.NET MVC 5

注:产品页面工作正常,一旦我删除/从EFDbContext移动DbSet我查What is a NullReferenceException and how do I fix it

EFDbContext.cs

using SportsStore.Domain.Entities; 
namespace SportsStore.Domain.Concrete 
{ 
    public class EFDbContext : DbContext 
    { 
     public DbSet<Product> Products { get; set; } 

     **public DbSet<Customer> Customers{ get; set; }** 
    } 
} 

EFProductRepostory.cs

namespace SportsStore.Domain.Concrete 
{ 
    public class EFProductRepository : IProductRepository 
    { 
     private EFDbContext context = new EFDbContext(); 

     public IEnumerable<Product> Products 
     { 
      get { return context.Products; } 
     } 

     public IEnumerable<Customer> Customers 
     { 
      get { return context.Customers; } 
     } 
} 

NinjectDependencyResolver。 CS

private void AddBindings() 
{ 
    kernel.Bind<IProductRepository>().To<EFProductRepository>(); 
} 

Web.config文件:

<connectionStrings> 
    <add name="EFDbContext" connectionString="Data Source=(localdb)\v11.0;Initial 
     Catalog=SportsStore;Integrated Security=True" 
     providerName="System.Data.SqlClient"/> 
</connectionStrings> 

错误:

System.NullReferenceException was unhandled by user code 
    HResult=-2147467261 
    Message=Object reference not set to an instance of an object. 
    Source=System.Web 
    StackTrace: 
     at System.Web.UI.ParseChildrenAttribute.GetHashCode() 
     at System.Collections.Generic.ObjectEqualityComparer`1.GetHashCode(T obj) 
     at System.Collections.Generic.HashSet`1.InternalGetHashCode(T item) 
     at System.Collections.Generic.HashSet`1.AddIfNotPresent(T value) 
     at System.Collections.Generic.HashSet`1.UnionWith(IEnumerable`1 other) 
     at System.Collections.Generic.HashSet`1..ctor(IEnumerable`1 collection, IEqualityComparer`1 comparer) 
     at System.Collections.Generic.HashSet`1..ctor(IEnumerable`1 collection) 
     at System.Data.Entity.ModelConfiguration.Utilities.AttributeProvider.GetAttributes(Type type) 
     at System.Data.Entity.ModelConfiguration.Utilities.AttributeProvider.<>c__DisplayClass4.<GetAttributes>b__3(PropertyInfo pi) 
     at System.Collections.Concurrent.ConcurrentDictionary`2.GetOrAdd(TKey key, Func`2 valueFactory) 
     at System.Data.Entity.ModelConfiguration.Utilities.AttributeProvider.GetAttributes(PropertyInfo propertyInfo) 
     at System.Data.Entity.ModelConfiguration.Conventions.PropertyAttributeConfigurationConvention`1.<.ctor>b__0(ConventionTypeConfiguration ec) 
     at System.Data.Entity.ModelConfiguration.Conventions.TypeConvention.ApplyCore(Type memberInfo, ModelConfiguration modelConfiguration) 
     at System.Data.Entity.ModelConfiguration.Conventions.TypeConventionBase.Apply(Type memberInfo, ModelConfiguration modelConfiguration) 
     at System.Data.Entity.ModelConfiguration.Configuration.ConventionsConfiguration.ApplyModelConfiguration(Type type, ModelConfiguration modelConfiguration) 
     at System.Data.Entity.ModelConfiguration.Conventions.Convention.ApplyModelConfiguration(Type type, ModelConfiguration modelConfiguration) 
     at System.Data.Entity.ModelConfiguration.Configuration.ConventionsConfiguration.ApplyModelConfiguration(Type type, ModelConfiguration modelConfiguration) 
     at System.Data.Entity.ModelConfiguration.Mappers.TypeMapper.MapComplexType(Type type, Boolean discoverNested) 
     at System.Data.Entity.ModelConfiguration.Mappers.PropertyMapper.MapPrimitiveOrComplexOrEnumProperty(PropertyInfo propertyInfo, Func`1 structuralTypeConfiguration, Boolean discoverComplexTypes) 
     at System.Data.Entity.ModelConfiguration.Mappers.PropertyMapper.MapIfNotNavigationProperty(PropertyInfo propertyInfo, EntityType entityType, Func`1 entityTypeConfiguration) 
     at System.Data.Entity.ModelConfiguration.Mappers.TypeMapper.<>c__DisplayClass14.<MapEntityType>b__e(PropertyMapper m, PropertyInfo p) 
     at System.Data.Entity.ModelConfiguration.Mappers.TypeMapper.MapStructuralElements[TStructuralTypeConfiguration](Type type, ICollection`1 annotations, Action`2 propertyMappingAction, Boolean mapDeclaredPropertiesOnly, Func`1 structuralTypeConfiguration) 
     at System.Data.Entity.ModelConfiguration.Mappers.TypeMapper.MapEntityType(Type type) 
     at System.Data.Entity.ModelConfiguration.Mappers.NavigationPropertyMapper.Map(PropertyInfo propertyInfo, EntityType entityType, Func`1 entityTypeConfiguration) 
     at System.Data.Entity.ModelConfiguration.Mappers.TypeMapper.MapEntityType(Type type) 
     at System.Data.Entity.DbModelBuilder.<>c__DisplayClassd.<MapTypes>b__7(Type type) 
     at System.Linq.Enumerable.WhereListIterator`1.MoveNext() 
     at System.Data.Entity.Utilities.IEnumerableExtensions.Each[T](IEnumerable`1 ts, Action`1 action) 
     at System.Data.Entity.DbModelBuilder.MapTypes(EdmModel model) 
     at System.Data.Entity.DbModelBuilder.Build(DbProviderManifest providerManifest, DbProviderInfo providerInfo) 
     at System.Data.Entity.DbModelBuilder.Build(DbConnection providerConnection) 
     at System.Data.Entity.Internal.LazyInternalContext.CreateModel(LazyInternalContext internalContext) 
     at System.Data.Entity.Internal.RetryLazy`2.GetValue(TInput input) 
     at System.Data.Entity.Internal.LazyInternalContext.InitializeContext() 
     at System.Data.Entity.Internal.InternalContext.Initialize() 
     at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) 
     at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() 
     at System.Data.Entity.Internal.Linq.InternalSet`1.GetEnumerator() 
     at System.Data.Entity.Infrastructure.DbQuery`1.System.Collections.Generic.IEnumerable<TResult>.GetEnumerator() 
     at ASP._Page_Views_admin_Admin_cshtml.Execute() in c:\Visual Studio 2013\Projects\Store\SportsStore.WebUI\Views\Admin\Index.cshtml:line 46 
     at System.Web.WebPages.WebPageBase.ExecutePageHierarchy() 
     at System.Web.Mvc.WebViewPage.ExecutePageHierarchy() 
     at System.Web.WebPages.StartPage.RunPage() 
     at System.Web.WebPages.StartPage.ExecutePageHierarchy() 
     at System.Web.WebPages.WebPageBase.ExecutePageHierarchy(WebPageContext pageContext, TextWriter writer, WebPageRenderingBase startPage) 
     at System.Web.Mvc.RazorView.RenderView(ViewContext viewContext, TextWriter writer, Object instance) 
     at System.Web.Mvc.BuildManagerCompiledView.Render(ViewContext viewContext, TextWriter writer) 
     at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context) 
     at System.Web.Mvc.ControllerActionInvoker.InvokeActionResult(ControllerContext controllerContext, ActionResult actionResult) 
     at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) 
     at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilterRecursive(IList`1 filters, Int32 filterIndex, ResultExecutingContext preContext, ControllerContext controllerContext, ActionResult actionResult) 

更新: 最后一件事来解释。当我将公共DbSet Customers {get;组; }到另一个类管理页面加载正常,所以repository.Products没有返回null,我不知道为什么发生这种情况

Source Error: 
Line 44:    </tr> 
Line 45: 
Line 46:    @foreach (var item in Model) 
Line 47:    { 
Line 48:     <tr> 

管理员/ index.cshtml:

@foreach (var item in Model) 
{ 
    <tr> 
     <td>@Html.DisplayFor(modelItem => item.Name)</td> 
     <td>@Html.DisplayFor(modelItem => item.Description)</td> 
     <td>@Html.DisplayFor(modelItem => item.Price)</td> 
     <td>@Html.DisplayFor(modelItem => item.Category)</td> 
     <td> 
      @Html.ActionLink("Edit", "Edit", new { id=item.ProductID }) | 
      @Html.ActionLink("Details", "Details", new { id=item.ProductID }) | 
      @Html.ActionLink("Delete", "Delete", new { id=item.ProductID }) 
     </td> 
    </tr> 
} 

AdminController。 CS

namespace SportsStore.WebUI.Controllers 
{ 
    public class AdminController : Controller 
    { 
     private IProductRepository repository; 

     public AdminController(IProductRepository repo) 
     { 
      repository = repo; 
     } 

     public ViewResult Index() 
     { 
      return View(repository.Products); 
     } 
    } 
} 
+2

欢迎来到SO。请显示触发异常的代码行。 – 2014-09-24 00:35:26

+1

您没有显示来自您的控制器的代码,但是我的猜测是您没有将模型传递给控制器​​的视图。 – Tony 2014-09-24 19:47:13

+0

我没有通过模型,这个网页工作正常,如果我删除DbSet Customers {get;组; }但是当我将其添加repository.Products返回null, – ma1169 2014-09-24 19:53:05

回答

1

错误为具有空值一个属性的结果

------------------------------------ 
| FNAME | LNAME | ........| AVATAR | 
------------------------------------ 
| xxxxx | xxxxx | xxxxxxx | NULL | 
------------------------------------ 

填充具有价值的阿凡达似乎解决了它,我从来没有怀疑过,因为在其他领域已经有一些数据