我在不同的电脑上使用相同的代码有一个奇怪的问题。这是一个 mvc3 代码优先项目。
我从 svn 下载了我的项目。按下构建按钮。像往常一样,db 初始化方法已被调用并开始执行。它创建了一些包含一些数据的表。没问题。如你看到的 :
这是一些屏幕截图,代码的执行,抱歉不能在这里发布,因为我需要代表。图像#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);
}
}
然而,在“使用块”(语句)中,当我仔细观察时,我的新 db 对象为每个实体抛出空引用,
..并相应地添加用户失败,并出现相同的“对象引用未设置为对象的实例”错误。奇怪的是,完全相同的代码在另一台计算机上运行时不会出错。具有几乎相同的设置和操作系统。
关于造成这种情况的任何想法?谢谢!
更新 #1:堆栈跟踪:
(内部上下文 c) 在 System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput 输入) 在 System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput 输入) 在 System.Data.Entity.Internal.LazyInternalContext.InitializeDatabaseAction(Action`1 行动) 在 System.Data.Entity.Internal.LazyInternalContext.InitializeDatabase() 在 System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(类型 实体类型) 在 System.Data.Entity.Internal.Linq.InternalSet`1.Initialize() 在 System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext() 在 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:C:\Users\Hp\Documents\Visual Studio 2010\Projects\Project2Klmsan\Klmsncamp\DAL 中 Klmsncamp.DAL.KlmsnInitializer.Seed(KlmsnContext context) 的第 31 行\KlmsnInitializer.cs:System.Data.Entity.DropCreateDatabaseAlways 的第 212 行`1.InitializeDatabase(TContext 语境) 在 System.Data.Entity.Database.c__DisplayClass2`1.b__0(DbContext C) 在 System.Data.Entity.Internal.InternalContext.c__DisplayClass5.b__3() 在 System.Data.Entity.Internal.InternalContext.PerformInitializationAction(动作 行动) 在 System.Data.Entity.Internal.InternalContext.PerformDatabaseInitialization() 在 System.Data.Entity.Internal.LazyInternalContext.b__4(InternalContext C) 在 System.Data.Entity.Internal.RetryAction`1.PerformAction(TInput 输入)