Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在移动服务数据库上启用代码优先迁移时出错_C#_Sql_Entity Framework_Ef Code First_Azure Sql Database - Fatal编程技术网

C# 在移动服务数据库上启用代码优先迁移时出错

C# 在移动服务数据库上启用代码优先迁移时出错,c#,sql,entity-framework,ef-code-first,azure-sql-database,C#,Sql,Entity Framework,Ef Code First,Azure Sql Database,我最近创建了一个Azure移动服务项目(C#后端),并将其连接到Azure SQL数据库。我一直在尝试在备份数据库上启用代码优先迁移,但当我尝试更新数据库时,它会抛出错误 我完成了启用迁移的所有常规步骤(启用迁移、添加迁移)。但当我尝试更新数据库时,它返回以下错误: 无法在表“dbo.appoints”上创建多个聚集索引。在创建另一个聚集索引之前,请删除现有的聚集索引“PK_dbo.appoints” 为什么会这样?我的数据库中没有任何表,项目几乎是默认的。我也遇到了同样的问题 这是由我们的基类

我最近创建了一个Azure移动服务项目(C#后端),并将其连接到Azure SQL数据库。我一直在尝试在备份数据库上启用代码优先迁移,但当我尝试更新数据库时,它会抛出错误

我完成了启用迁移的所有常规步骤(启用迁移、添加迁移)。但当我尝试更新数据库时,它返回以下错误:

无法在表“dbo.appoints”上创建多个聚集索引。在创建另一个聚集索引之前,请删除现有的聚集索引“PK_dbo.appoints”


为什么会这样?我的数据库中没有任何表,项目几乎是默认的。

我也遇到了同样的问题

这是由我们的基类EntityData的定义引起的:

public class OrgTest : EntityData
{
    public string Prop1 { get; set; }
}
我用自己的实现“CustomEntity”替换了EntityData,其中删除了CreatedAt列上的属性[Index(IsClustered=true)]:

public abstract class CustomEntity : ITableData
{
   // protected CustomEntity();

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [TableColumn(TableColumnType.CreatedAt)]
    public DateTimeOffset? CreatedAt { get; set; }
    [TableColumn(TableColumnType.Deleted)]
    public bool Deleted { get; set; }
    [Key]   
    [TableColumn(TableColumnType.Id)]
    public string Id { get; set; }
    [DatabaseGenerated(DatabaseGeneratedOption.Computed)]
    [TableColumn(TableColumnType.UpdatedAt)]
    public DateTimeOffset? UpdatedAt { get; set; }
    [TableColumn(TableColumnType.Version)]
    [Timestamp]
    public byte[] Version { get; set; }
} 
现在我继承了这个:

public class OrgTest : CustomEntity   // EntityData
{
    public string Prop1 { get; set; }
}
也许我会有麻烦进一步,但目前我可以创建我的模型!
希望你也能这样开始

我今天和这个问题斗争了几个小时。直到我找到这个链接:

如果你按照那里的说明去做,它肯定会成功的。最重要的是,当您在本地调试会话中点击F5时,迁移将发生。

请参阅本文:


EntityData为CreateAt定义一个群集索引,默认情况下Id是一个群集索引,这样它会提供一个错误,您应该只定义一个。

如果您在创建迁移类后在更新数据库中遇到此错误,请查看您的迁移类。迁移类将采用主is聚集索引。所以从up()方法中删除它

.PrimaryKey(t=>t.Id,集群:false) .Index(t=>t.CreatedAt,聚集:true)

如果您在azure移动服务上使用它,请不要手动调用“更新数据库”。
请参阅

关于从自定义实体类派生的几个答案将起作用,但它们不是理想的解决方案。正如EF团队(和其他人)所提到的,您只需将这一行添加到您的上下文配置构造函数中

 SetSqlGenerator("System.Data.SqlClient", new EntityTableSqlGenerator());

这将删除您在创建迁移时的错误,并允许您通过powershell命令更新数据库。

我最终只是使用了一个Web API项目。这可能是正确的答案,但我无法确认解决方案。它根据我之前发布的教程工作。但是,在发布之前在本地(F5)运行项目、在WebApiConig类中进行更改(如本教程第6点所述)以及启用自动迁移(迁移文件夹中的配置类)非常重要。由于我使用此工作流,我没有任何进一步的问题,只有一次数据库访问权限设置不正确。但现在这似乎也得到了解决。我遇到了一个问题,当我尝试使用此CustomEntity向表中插入一行时,出现了以下错误:
操作失败,出现以下错误:“无法将值NULL插入列'CreatedAt'
您有什么解决方案吗?现在我有这样的错误,这是正确的答案。当我尝试下面的答案时,当我查询它时,客户端总是抛出“坏请求”错误,即使我可以使用Fiddler下拉数据。因此,我放弃了从EntityData继承的数据库,然后使用自动迁移来创建表。它工作!!!链接似乎已移动。请注意,引用的文章以文本开头:默认初始值设定项已有所更改,因为.NET后端已达到“通用性”里程碑。您可以在中找到最新信息,这是中引用的文章。此解决方案对我有效。在这个错误突然发生之前,我已经多次将这个应用程序部署到服务器上,并删除了所有要重新启动的表。因此,添加这一行并再次重新部署效果很好——在这之后,我的所有表都被重新创建了。谢谢。这将放在您的“Configuration.cs”文件中。内部密封类配置:dbmigtorysconfiguration{public Configuration(){automaticmmigtorysenabled=true;SetSqlGenerator(“System.Data.SqlClient”,new EntityTableSqlGenerator());}这不再链接到任何有用的内容。已尝试在azure页面上搜索,但没有任何乐趣。。。