Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/82.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
Sql 代码首先创建不带标识列的表[Key]_Sql_Ef Code First_Migration_Identity_Entity Framework Migrations - Fatal编程技术网

Sql 代码首先创建不带标识列的表[Key]

Sql 代码首先创建不带标识列的表[Key],sql,ef-code-first,migration,identity,entity-framework-migrations,Sql,Ef Code First,Migration,Identity,Entity Framework Migrations,我创建类并添加迁移。所有具有基本属性的类的外观如下所示: public class CustomersInquiries : BaseModel { [Key] public int CustomersInquiryId { get; set; } } BaseModel-是我的自定义字段(addedBy、addedDate等) 不久前,我为我的数据库添加了许多表。生成create all表witch identity NO的迁移代码,键不会

我创建类并添加迁移。所有具有基本属性的类的外观如下所示:

  public class CustomersInquiries : BaseModel
    {
        [Key]
        public int CustomersInquiryId { get; set; }
    }
BaseModel-是我的自定义字段(addedBy、addedDate等)

不久前,我为我的数据库添加了许多表。生成create all表witch identity NO的迁移代码,键不会自动递增

我尝试在我的模型或模型创建中创建新的迁移切换(无混合):

modelBuilder.Entity()
.Property(c=>c.CustomersInquiryId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
没有效果。迁移代码生成空的

如何修复我的数据库

编辑:

我有:

  • 在SSM中生成脚本(仅限schemat)
  • 删除数据库
  • 在旧数据库上创建同名数据库
  • 修复我的迁移类(添加标识:true where missing)
  • 在pmc更新数据库-verbose-force中
  • 这一步解决了我的问题,但下一次像这样的事情,我将能够浪费时间寻找复制。我不知道为什么bad会生成这些表

    EDIT2:

    要验证,请编写脚本。它可能对某人有用

    SELECT i.name AS IndexName, OBJECT_NAME(ic.OBJECT_ID) AS TableName, 
           COL_NAME(ic.OBJECT_ID,ic.column_id) AS ColumnName,
    
        ident.seed_value, ident.increment_value, ident.last_value
    FROM sys.indexes AS i
    INNER JOIN sys.index_columns AS ic
    ON i.OBJECT_ID = ic.OBJECT_ID
    AND i.index_id = ic.index_id
    LEFT OUTER JOIN sys.identity_columns AS ident
    ON i.object_id = ident.object_id
    WHERE i.is_primary_key = 1 AND OBJECT_NAME(ic.OBJECT_ID) <> N'__MigrationHistory'
    
    选择i.name作为IndexName,选择OBJECT\u name(ic.OBJECT\u ID)作为TableName,
    列名称(ic.OBJECT\u ID,ic.column\u ID)作为列名称,
    标识种子值、标识增量值、标识最后一个值
    从sys.index作为i
    内部连接sys.index_列作为ic
    在i.OBJECT\u ID=ic.OBJECT\u ID上
    i.index_id=ic.index_id
    左侧外部联接系统标识\u列作为标识
    在i.object_id=ident.object_id上
    其中i.is_primary_key=1和OBJECT_NAME(ic.OBJECT_ID)N“迁移历史”
    
    看到这个我知道如何添加到现有表中。但我不喜欢在代码中首先标记列属性[Key]和未在db中生成的标识列。我以为您的问题是关于将现有列更改为标识的,迁移不会解决这个问题。你需要在链接中使用技巧。不确定它们最初为什么没有添加为标识,因为整数键的默认约定是使用标识。
      modelBuilder.Entity<CustomersInquiries>()
       .Property(c => c.CustomersInquiryId)
       .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
    
    SELECT i.name AS IndexName, OBJECT_NAME(ic.OBJECT_ID) AS TableName, 
           COL_NAME(ic.OBJECT_ID,ic.column_id) AS ColumnName,
    
        ident.seed_value, ident.increment_value, ident.last_value
    FROM sys.indexes AS i
    INNER JOIN sys.index_columns AS ic
    ON i.OBJECT_ID = ic.OBJECT_ID
    AND i.index_id = ic.index_id
    LEFT OUTER JOIN sys.identity_columns AS ident
    ON i.object_id = ident.object_id
    WHERE i.is_primary_key = 1 AND OBJECT_NAME(ic.OBJECT_ID) <> N'__MigrationHistory'