Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC3数据库实体不';无法按预期进行初始化_C#_Asp.net Mvc_Entity Framework_Asp.net Mvc 3 - Fatal编程技术网

C# MVC3数据库实体不';无法按预期进行初始化

C# MVC3数据库实体不';无法按预期进行初始化,c#,asp.net-mvc,entity-framework,asp.net-mvc-3,C#,Asp.net Mvc,Entity Framework,Asp.net Mvc 3,在仔细研究了这个奇怪问题的解决方案之后,我什么也没做。我几乎绝望了 我正在从事一个MVC3项目 我有一个DB上下文类,如下所示: //SpaceUpEntities.cs public class SpaceUpEntities: DbContext { public DbSet<User> Users { get; set; } public DbSet<Profile> Profiles { get; set; } public DbSet&l

在仔细研究了这个奇怪问题的解决方案之后,我什么也没做。我几乎绝望了

我正在从事一个MVC3项目

我有一个DB上下文类,如下所示:

//SpaceUpEntities.cs
public class SpaceUpEntities: DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Profile> Profiles { get; set; }
    public DbSet<Venue> Venues { get; set; }
    public DbSet<Room> Rooms { get; set; }
    public DbSet<Category> Categories { get; set; }
    public DbSet<Event> Events { get; set; }
    public DbSet<Capacity> Capacities { get; set; }
    public DbSet<VenueStatus> VenueStatuses { get; set; } 
}
使用(var entities=new SpaceUpEntities())之后,
实体应该已初始化,但我最终出现了此错误

错误消息:

功能评估已禁用,因为以前的功能评估失败 超时。必须继续执行才能重新启用函数 评估

起初,我认为这是与服务器的连接问题,因此我检查:

  • 连接字符串
  • SQL Server设置(SQL Server 2012)
  • 虽然我很难理解为什么它们是这个问题的原因,因为我使用了一些方法来测试我的连接字符串,发现它没有问题

    任何帮助都将不胜感激。 先谢谢你

    唐道

    p/S:这是我测试连接字符串的方式: 这是我的连接字符串 我用这个测试了一下

    确保您使用的初始化策略与您试图实现的目标相匹配<代码>数据库.SetInitializer(…)

    在您的
    应用程序启动
    方法中使用下面的行,我相信您可能绕过了初始化

    Database.SetInitializer<SpaceUpEntities>(null);
    
    Database.SetInitializer(null);
    
    以下是基于代码优先的数据库初始化策略中的一些选项,希望对您有所帮助:


    有四种不同的数据库初始化策略:

  • CreateDatabaseIfNotExists:这是默认初始值设定项。顾名思义,如果按照配置不存在数据库,它将创建数据库。但是,如果您更改模型类,然后使用此初始值设定项运行应用程序,那么它将引发异常

  • DropCreateDatabaseIfModelChanges:如果模型类(实体类)已更改,此初始值设定项将删除现有数据库并创建新数据库。因此,当模型类更改时,您不必担心维护数据库模式

  • DropCreateDatabaseAlways:顾名思义,每次运行应用程序时,此初始值设定项都会删除现有数据库,而不管您的模型类是否已更改。当您需要新的数据库时,每当您在开发应用程序时运行应用程序时,这将非常有用

  • 自定义DB初始值设定项:如果上述任何一项不满足您的要求,或者您希望使用上述初始值设定项执行其他初始化数据库的过程,您也可以创建自己的自定义初始值设定项


  • 您能确认您的表已经在数据库中创建,并且已经添加了数据种子吗?表已经创建。数据库中有示例数据。从屏幕截图上看不清楚错误是什么,但通过执行
    Database.SetInitializer(null)您正在关闭数据库初始化器。工具->选项调试取消选中“启用属性求值和其他隐式函数调用”那你看看有没有error@Zaki:在取消选中optionI have error之后,我仍然会收到相同的错误,甚至在我有机会对数据库进行任何更改之前。您正在寻找哪种初始化?如果您指的是DBContext,那么我相信我在Global.asax.cs上有它。否则,我不知道并且可能会使用一些指针,我的意思是,您实际上是在为数据库播种行,还是仅仅根据SpaceUpEntities datacontext对象创建表?使用LINQ,如果中间对象是延迟加载的,您不能总是以您可能期望的方式检查它们。您是否会引发实际异常,或者您只是在调试时检查对象?此时我会出现异常'var emailExisted=entities.Users.FirstOrDefault(I=>I.Email==user.Email);'然后我调试以查看这些错误消息。我用SetInitializer再次尝试了它,这次它工作了。我猜上次失败是因为我没有清理并重建项目,也许吧?我将进行几轮测试,看看它是否真的有效,然后标记你的答案。非常感谢你的帮助,克里斯
    
     //SecurityRepository.cs 
        public RegisterFeedback Register(User user, Profile profile)
        {
            try
            {
                using (var entities = new SpaceUpEntities())
                {  
                    // Check existing email address
                    var emailExisted = entities.Users.FirstOrDefault(i => i.Email == user.Email);
                    //... So on 
                }
            }
            catch (Exception e)
            {
                Logger.Error(e);
                return new RegisterFeedback(false, Messages.GeneralError);
            }
        }
    
    Database.SetInitializer<SpaceUpEntities>(null);