1

我在不同的电脑上使用相同的代码有一个奇怪的问题。这是一个 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 对象为每个实体抛出空引用,

截图 img #3-#4

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

关于造成这种情况的任何想法?谢谢!

更新 #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 输入)
4

1 回答 1

0

你能至少告诉我你的DbContext班级吗,我想你可能没有将你的属性设置为DBsetType

public class EnocDB : DbContext
  {
      public DbSet<EnocParcels> Parcels { get; set; }
      public DbSet<ReviewEnoc> Reviews { get; set; }
  }
于 2014-02-23T15:11:18.720 回答