输入update-database后出现以下错误:
无法在表'dbo.AppUsers'上创建多个聚簇索引。删除现有的聚簇索引'PK_dbo.AppUsers',然后再创建另一个。
我正在开发Azure移动服务。
我有三种数据模型:
;WITH c
AS (SELECT Dept,
Count(*) cnt
FROM Emp
GROUP BY Dept)
SELECT c.*
FROM c
WHERE c.cnt = (SELECT Max(cnt)
FROM c)
它与迁移有关,因为:
在上下文文件中:
public class AppUser : EntityData
{
public string Username { get; set; }
public virtual ICollection<RatingItem> userRatings { get; set; }
}
public class PlaceItem : EntityData
{
public string PlaceName { get; set; }
public int Group { get; set; }
public string XCoordinate { get; set; }
public string YCoordinate { get; set; }
}
public class RatingItem : EntityData
{
public int Ratings { get; set; }
public string PlaceId { get; set; }
public AppUser user { get; set; }
}
}
答案 0 :(得分:24)
通常,此错误消息是由未运行移动应用/移动服务数据库生成器引起的。实体框架没有用于创建非主键的聚簇索引的注释,因此移动服务器SDK手动创建正确的SQL语句以将CreatedAt
设置为非主键聚簇索引。
要解决此问题,请在应用迁移之前运行数据库生成器。在Migrations\Configuration.cs
文件中,包含以下内容:
public Configuration()
{
AutomaticMigrationsEnabled = false;
SetSqlGenerator("System.Data.SqlClient", new EntityTableSqlGenerator());
}
要了解详情,请参阅How to make data model changes to a .NET backend mobile service。该主题适用于两者移动服务和移动应用,但移动应用中的某些命名空间不同。
答案 1 :(得分:2)
如@gorillapower在评论中所述,这段代码也非常重要。
modelBuilder.Conventions.Add(new AttributeToColumnAnnotationConvention<TableColumnAttribute, string>( "ServiceTableColumn", (property, attributes) => attributes.Single().ColumnType.ToString()));
在你的
里面protected override void OnModelCreating(DbModelBuilder modelBuilder)
在DbContext
配置类中。不要忘记重新生成迁移。