迁移不会将身份属性添加到EF Core

时间:2018-03-01 16:31:00

标签: c# sql asp.net entity-framework ef-migrations

我在SQL服务器中有现有的带有表的模型,也有数据。我使用EF Core新模型创建 - 一些bool,ForgeinId,Id with attribute - [DatabaseGenerated(DatabaseGeneratedOption.Identity)]

接下来我添加了迁移,我不得不添加自定义SQL,因为我必须添加新行并将其连接到上一个表。

第一个模型(已经存在于db中):

public Guid Id {get; set;}
public virtual Table Table {get; set;} // that is just added so this is included in migration
// some data

第二个模型(刚刚创建):

[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public Guid tableId {get; set;}
public Guid ForgeinId {get; set;}
public ForgeinTable ForgeinTable {get; set;}
// some data

迁移:

migrationBuilder.CreateTable(
name: "Table",
columns: table => new
{
tableId = table.Column<Guid>(type: "uniqueidentifier", nullable: false),
//some data
}
migrationBuilder.Sql("insert into *newTableName* (ForgeinId) select Id from *oldTableName*;");

// adding index

接下来,我在新表的tableId列中遇到有关插入NULL的错误。那么为什么身份不起作用?

答案非常简单 - 我必须添加

defaultValueSql: "newsequentialid() 

到我的ID,然后从我的SQL表中删除此属性。 此处有更多信息: Entity Framework 6 GUID as primary key: Cannot insert the value NULL into column 'Id', table 'FileStore'; column does not allow nulls

1 个答案:

答案 0 :(得分:0)

您可以尝试在没有任何自定义sql的情况下添加迁移,并检查newTableName是否在id列上具有标识。如果是 - 尝试在迁移中migrationBuilder.Sql(...)方法的末尾使用protected override void Up(MigrationBuilder migrationBuilder)