asp.net mvc代码首先使用db context对象抛出null引用异常

时间:2013-02-11 18:13:26

标签: asp.net-mvc-3 entity-framework code-first nullreferenceexception dbcontext

我在不同的电脑上使用相同的代码有一个奇怪的问题。 这是mvc3代码的第一个项目。

我从svn下载了我的项目。按下构建按钮。像往常一样,db initializer方法已被调用并开始执行。它创建了几个包含一些数据的表。没问题。如你所见:

Here is some screenshots, execution of the code, sorry cant post here since i need rep. img #0-#1-#2)

但是,要为应用程序创建用户,我决定在存储库类中执行此操作。因此我在初始化程序中调用我的create方法,这是我的usercreate函数:

public MembershipUser CreateUser(string username, string firstname, string lastname, string password, string email)
    {
        using (KlmsnContext db = new KlmsnContext())
        {
            User user = new User();

            user.UserName = username;
            user.FirstName = firstname;
            user.LastName = lastname;
            user.Email = email;
            user.PasswordSalt = CreateSalt();
            user.Password = CreatePasswordHash(password, user.PasswordSalt);
            user.CreatedDate = DateTime.Now;
            user.IsActivated = false;
            user.IsLockedOut = false;
            user.LastLockedOutDate = DateTime.Now;
            user.LastLoginDate = DateTime.Now;

            db.Users.Add(user);

    db.SaveChanges();

            return GetUser(username);
        }
    }

然而,在“使用块”(语句)中,当我仔细查看时,我的新数据库对象会为每个实体抛出空引用,

screenshot img #3-#4

..并且添加用户时相应的“对象引用未设置为对象实例”错误。奇怪的是,完全相同的代码在不同的计算机上运行时没有错误。几乎相同的设置和操作系统。

有什么想法导致这个? 谢谢!

更新#1:StackTrace:

    (InternalContext c)
   at System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input)
    at System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input) at
    System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1
    action)
    at System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase()
    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.get_InternalContext()
    at System.Data.Entity.Internal.Linq.InternalSet`1.ActOnSet(Action action, EntityState newState, Object entity, String methodName) at System.Data.Entity.Internal.Linq.InternalSet`1.Add(Object entity) at System.Data.Entity.DbSet`1.Add(TEntity entity) at Klmsncamp.Models.UserRepository.CreateUser(String username, String firstname, String lastname, String password, String email) in C:\Users\Hp\Documents\Visual Studio 2010\Projects\Project2Klmsan\Klmsncamp\Models\UserRepository.cs:line 31 at Klmsncamp.DAL.KlmsnInitializer.Seed(KlmsnContext context) in C:\Users\Hp\Documents\Visual Studio 2010\Projects\Project2Klmsan\Klmsncamp\DAL\KlmsnInitializer.cs:line 212 at System.Data.Entity.DropCreateDatabaseAlways`1.InitializeDatabase(TContext
    context)
    at
    System.Data.Entity.Database.c__DisplayClass2`1.b__0(DbContext
    c)
    at
    System.Data.Entity.Internal.InternalContext.c__DisplayClass5.b__3()
    at
    System.Data.Entity.Internal.InternalContext.PerformInitializationAction(Action
    action)
    at
    System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization()
    at
    System.Data.Entity.Internal.LazyInternalContext.b__4(InternalContext
    c)
    at System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput input) 

1 个答案:

答案 0 :(得分:0)

你能否至少告诉我你的DbContext课程,我想你可能没有把你的财产设置为DBset类型

public class EnocDB : DbContext
  {
      public DbSet<EnocParcels> Parcels { get; set; }
      public DbSet<ReviewEnoc> Reviews { get; set; }
  }