小编Mar*_*bec的帖子

实体框架回滚并删除错误的迁移

我在C#中使用EF 6.0进行手动迁移和更新.我在数据库上有大约5次迁移,但我意识到上次迁移很糟糕,我不想要它.我知道我可以回滚到先前的迁移,但是当我添加新的(固定的)迁移并运行Update-Database时,即使应用了错误的迁移.

我试图回滚到上一次迁移并删除迁移错误的文件.但是,当我尝试添加新的迁移时,我在更新数据库时遇到错误,因为迁移文件已损坏(更具体地说,第一行代码将表A重命名为B并且是下一行,EF正在尝试更新表名字A - 也许是一些EF错误).

是否有一些我可以运行的查询,这会告诉EF类似于"忘记上次迁移,就像它从未存在过,这很糟糕"?像删除迁移这样的东西.

Edit1 我找到了适合我的解决方案.将模型更改为良好状态并运行Add-Migration TheBadMigration -Force.这将重新构建最后的,而不是应用的迁移.

无论如何,这仍然没有完全回答原来的问题.如果我将UpdateDatabase更改为错误的迁移,我没有找到如何回滚和创建新迁移的好方法,不包括坏迁移.

谢谢

c# migration entity-framework rollback

160
推荐指数
6
解决办法
20万
查看次数

在奇怪的情况下抛出AccessViolationException

我在c#中待了很长时间,但我从未遇到过这种错误.首先,你是否看到关于这个单个代码块的任何错误(可能是错误的)(除了它的逻辑当然,我知道它总是返回0)?

public static int GetDecimals(MySimpleEnum val)
    {
        int result = 0;
        switch (val)
        {
            case MySimpleEnum.Base:
            case MySimpleEnum.Slow:
            case MySimpleEnum.Normal:
            case MySimpleEnum.Quick:
            case MySimpleEnum.Fastest:
                result = 0;
                break;
        }            
        return result;        
    }
Run Code Online (Sandbox Code Playgroud)

发布项目设置: DEBUG constant = false; TRACE constant = true; 优化Code​​ = true; 输出/高级/调试信息=无;

IIS =版本7.5

此方法具有指定的释放设置会抛出" System.AccessViolationException:尝试读取或写入受保护的内存.这通常表示其他内存已损坏."

这是有趣的部分.这些情况是,它不会抛出此异常:

  1. 在IIS(Express和not-Express)8.5上运行它(不需要项目编辑).
  2. 设置优化代码= false; 和输出/高级/调试信息=假;
  3. 将内部方法包装到try/catch块中(尝试使用catch块中的log4net记录异常 - 空日志)
  4. 用一些不同的代码替换方法的内部.

注意事项:

  • 必须在服务器上使用win调试器捕获异常(没有调用常规的.NET异常处理程序)
  • 应用程序在异常后崩溃.
  • 这个代码块在几个月前正在运行(很长一段时间没有发布).错误开始可能是一些更新.
  • 使用IIS 7.5和一台具有IIS 8.5和IIS Express(VS2012)的计算机进行了测试.结果相同.
  • 我尝试了很多不同的项目设置组合.基本上,如果我没有像第2点那样设置设置,它会在IIS 7.5上抛出异常.
  • 我的工作(和构建)计算机正在运行带有最新更新的Windows 8.1.
  • 代码块位于单独的项目(类库)中.

我知道如何解决这个问题.但我不喜欢关闭问题,而不知道原因.此外,我希望将来避免这种情况.你认为你可以帮助我吗?如果它是一些空引用异常,为什么会发生这种情况?为什么它是特定于调试/发布或特定于IIS版本?

*注2:

最近,我在发布了与缺少DLL的(System.Net.Http.Formatting.dll,System.Web.Http.dll,System.Web.Http.WebHost.dll)的问题.这是因为一些微软的安全更新.也许这是类似的东西.*

编辑1 添加枚举声明的结构.

public enum …
Run Code Online (Sandbox Code Playgroud)

.net c# asp.net iis access-violation

8
推荐指数
1
解决办法
1057
查看次数

应用程序启动后第一次查询的 MongoDb C# 驱动程序很慢

我正在使用 C# 驱动程序测试 MongoDB (3.0),我注意到一些奇怪的事情。

我开始 test db localy 然后我创建了测试控制台应用程序。在那里,我这样做是为了初始化驱动程序:

var client = new MongoClient();
var database = client.GetDatabase("test");
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,但后来我尝试根据 id(默认索引)获取数据,所以我添加了以下内容:

var collection = database.GetCollection<BsonDocument>("myData");
var filter = Builders<BsonDocument>.Filter.Eq("id", "F1234");
var result = collection.Find(filter).ToListAsync().Result;
Run Code Online (Sandbox Code Playgroud)

为了获得平均时间消耗,我添加了代码来测量查询的时间(通过用两个 DateTime.Now 装饰它然后减去它们 - 我知道,脏)并将所有代码放入循环中。另外,我让每次迭代时间显示在控制台上

现在每次我按 F5,第一次迭代大约需要 150 毫秒,但下一次迭代平均约为 1 毫秒。重要的是,这与缓存无关,因为每次迭代都可以查询不同的 id 并且结果完全相同。此外,我可以在每次迭代时再次初始化 MongoClient,但它的行为始终如我所描述的那样。

应用程序启动后的每个第一次查询都需要更多时间。

我需要知道,这是否真的是由于 MongoClient 内部的一些初始化(也许某些静态类是通过第一次查询进行初始化的?),或者这是否可以在运行应用程序时随时发生。

注意:我还尝试用 Thread.Sleep 替换查询,以确保它不是某些 .NET 问题。事实并非如此。确实是“collection.Find”在第一次使用时需要更多时间。

谢谢!

一段时间后注意

所以过了一段时间,我发现每个 CRUD 操作都需要它的“预热第一请求”。有时每个集合上的每个 CRUD 操作。奇怪的。我发布这个是为了让其他人知道:-)

c# performance driver mongodb mongodb-.net-driver

5
推荐指数
0
解决办法
1279
查看次数