回答

收藏

使用EF 6 alpha3 Code First部署到SQL Azure犯错,创造__MigrationHistory

技术问答 技术问答 239 人阅读 | 0 人回复 | 2023-09-14

我首先使用EF 6 alpha 3代码Update-Database命令的SQL Azure创建数据库时,出现以下错误:2 T# K  V/ q9 _2 C$ S
此版本的SQL Server不支持没有聚集索引的表格。请创建一个聚集索引,然后重试。6 p3 m$ u; K) I' A
我跟踪到__MigrationHistory表创建sql命令错误。% I- w, Y8 J1 w: f1 M
CREATE TABLE [dbo].[__MigrationHistory]  [MigrationId] [nvarchar](255) NOT NULL,   [ContextKey] [nvarchar](512) NOT NULL,   [Model] [varbinary](max) NOT NULL,   [ProductVersion] [nvarchar](32) NOT NULL,   CONSTRAINT [PK_dbo.__MigrationHistory] PRIMARY KEY NONCLUSTERED ([MigrationId],[ContextKey]))任何人都对如何解决这个问题有任何想法?) ~% K1 x! W" c/ \( L& g2 m# R
谢谢,- e' n2 e5 T) n. P4 x0 n6 d
                                                                , U% S, [) `: W1 a
    解决方案:                                                               
4 }3 N# U: o+ H. {8 N& L. S+ s$ ~                                                                这是Alpha 3中的错误-请原谅不便。4 z6 J' o+ B7 G/ ?
有一个非常简单的解决方法:
4 u6 T, v: ?" n" d5 I% ^* Y  G1)创建自定义迁移SQL生成器:
* R& N. R4 W* hpublic class AzureSqlGenerator : SqlServerMigrationSqlGenerator{    protected override void Generate(CreateTableOperation createTableOperation)                                                                                                                                                                                                                 if ((createTableOperation.PrimaryKey != null)            && !createTableOperation.PrimaryKey.IsClustered)                                                                                                                                                                                                                         createTableOperation.PrimaryKey.IsClustered = true;          base.Generate(createTableOperation);   2)在您的迁移配置中注册自定义生成器:: H" ^+ `7 i+ H4 D  d% P/ X
internal sealed class Configuration : DbMigrationsConfiguration    public Configuration()           AutomaticMigrationsEnabled = true;        SetSqlGenerator("System.Data.SqlClient",new AzureSqlGenerator();protected override void Seed(MyContext context)       }}
分享到:
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则