我在我的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 操作,临时表主要是在去重、排序、分组过程中创建,不需要排序和分组,也就不需要创建临时表。 由