当前位置: 首页 > 面试题库 >

EF:不正确使用空间/全文/哈希索引和显式索引顺序

隗翰海
2023-03-14
问题内容

我在我的WEB Api项目中使用了Entity Framework。我使用代码优先迁移。

事情是:进行初始迁移并尝试更新数据库后,出现此错误

不正确使用空间/全文/哈希索引和显式索引顺序

这是由更新数据库中的此SQL命令引起的:

create table `Articles` 
(
 `articleId` int not null  auto_increment ,
 `title` longtext not null ,
 `digest` longtext,
 `content` longtext not null ,
 `imgLink` longtext not null ,
 `releaseDate` datetime,
 `userId` int not null ,
  primary key ( `articleId`)
) engine=InnoDb auto_increment=0
  CREATE index  `IX_userId` on `Articles` (`userId` DESC) using HASH

SQL命令是从迁移中的以下代码生成的:

CreateTable(
            "dbo.Articles",
            c => new
                {
                    articleId = c.Int(nullable: false, identity: true),
                    title = c.String(nullable: false, unicode: false),
                    digest = c.String(unicode: false),
                    content = c.String(nullable: false, unicode: false),
                    imgLink = c.String(nullable: false, unicode: false),
                    releaseDate = c.DateTime(precision: 0),
                    userId = c.Int(nullable: false),
                })
            .PrimaryKey(t => t.articleId)
            .ForeignKey("dbo.Users", t => t.userId, cascadeDelete: true)
            .Index(t => t.userId);

似乎在创建索引时出现DESC和HASH会导致此错误。关于如何更改生成的sql索引创建的任何想法,使其与简单的索引一起使用?或者只是简单地绕过此错误,以便我的更新数据库可以通过?谢谢

编辑: 添加了文章类

public class Article
{
    public Article()
    {
        this.comments = new HashSet<Comment>();
    }

    [Key]
    public int articleId { get; set; }

    [Required]
    public string title { get; set; }

    public string digest { get; set; }

    [Required]
    public string content { get; set; }

    [Required]
    public string imgLink { get; set; }

    public DateTime? releaseDate { get; set; }

    // Cl茅 茅trang猫re (table User)
    public int userId { get; set; }

    // Auteur de l'article
    public virtual User user { get; set; }

    // Commentaires
    public virtual ICollection<Comment> comments { get; set; }
}

我将添加索引的DESC HASH在迁移文件中每个.Index()的输出中生成


问题答案:

解决了。

在您的迁移文件中,用如下的sql命令替换.Index条目

CreateTable(
        "dbo.Articles",
        c => new
            {
                articleId = c.Int(nullable: false, identity: true),
                title = c.String(nullable: false, unicode: false),
                digest = c.String(unicode: false),
                content = c.String(nullable: false, unicode: false),
                imgLink = c.String(nullable: false, unicode: false),
                releaseDate = c.DateTime(precision: 0),
                userId = c.Int(nullable: false),
            })
        .PrimaryKey(t => t.articleId)
        .ForeignKey("dbo.Users", t => t.userId, cascadeDelete: true)
        .Index(t => t.userId); // REMOVE THIS

在Up()方法的底部添加相应的SQL命令(对于每个索引)

Sql("CREATE index `IX_userId` on `Articles` (`userId` DESC)");

然后我为DataReaders添加的问题与MySQL连接器有关。MySQL连接器不支持多个活动连接。要处理此问题,如果您的控制器中有此命令

public IEnumerable<Article> GetArticles()
{
    return db.Articles;
}

现在应该是

public IEnumerable<Article> GetArticles()
{
    return db.Articles.ToList(); // ToList() will manage the request to work with only ONE data reader, 
}

如果您不知道如何将.Index()转换为SQL命令,只需

update-database -verbose

并且所有的SQL命令将显示



 类似资料:
  • 问题内容: 我似乎找不到太多的文档。在支持这种查询的PostgreSQL上创建数据库/表的最简单方法是什么?SELECT * FROM table WHERE distance(POINT(0,0),table.location)<= 1000m; 其中POINT(0,0)和table.location应该是经度/纬度对,并且1000m是1000米。我应该如何索引该表?谢谢。 问题答案: Post

  • 问题内容: 这是我永远遇到的一个问题。 据我所知,索引的顺序很重要。因此,类似的索引与 并不相同,对吧? 如果我仅定义第一个索引,是否意味着它将仅用于 而不是 由于我使用的是ORM,所以我不知道这些列的调用顺序。这是否意味着我必须在所有排列上添加索引?如果我有2列索引,那是可行的,但是如果我的索引是3列或4列怎么办? 问题答案: 当查询条件仅适用于 部分 索引时,索引顺序很重要。考虑: 如果你的索

  • 我正在使用node.js连接到neo4j数据库。每当我必须为一个节点设置索引时,我都会通过转到neo4j浏览器(localhost:7474)来手动完成。 我构建了自己的nodejs适配器来连接到neo4j,因此目前我只能访问密码查询。要创建索引,我只能访问cypher或浏览器(7474)。那么创建自动全文索引的正确方法是什么,最好是从浏览器本身创建?我如何使用密码访问它(或者我必须访问它?neo

  • 本文向大家介绍MySQL索引使用说明(单列索引和多列索引),包括了MySQL索引使用说明(单列索引和多列索引)的使用技巧和注意事项,需要的朋友参考一下 1. 单列索引 在性能优化过程中,选择在哪些列上创建索引是最重要的步骤之一。可以考虑使用索引的主要有两种类型的列:在Where子句中出现的列,在join子句中出现的列。请看下面这个查询: 这个查询与前面的查询略有不同,但仍属于简单查询。由于age是

  • 本文向大家介绍Oracle 如何创建和使用全文索引,包括了Oracle 如何创建和使用全文索引的使用技巧和注意事项,需要的朋友参考一下 不使用Oracle text功能,也有很多方法可以在Oracle数据库中搜索文本.可以使用标准的INSTR函数和LIKE操作符实现。   有很多时候,使用instr和like是很理想的, 特别是搜索仅跨越很小的表的时候.然而通过这些文本定位的方法将导致全表扫描,对

  • 主要内容:1 索引的优缺点,2 哈希索引,3 全文索引,4 空间数据索引(R-Tree)我们看看其他哈希索引结构的实现,以及索引的优缺点。 1 索引的优缺点 索引可以让服务器快速的定位到表的指定位置。但是这并不是索引的唯一作用,总结下来索引有以下4个优点: 索引大大减少了服务器需要扫描的数据量。 B-Tree索引可以帮助服务器避免排序和临时表,可以用于 ORDER BY 和 GROUP BY 操作,临时表主要是在去重、排序、分组过程中创建,不需要排序和分组,也就不需要创建临时表。 由