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