SQL Server中Entity Framework迁移时Guid为何被转为整数?
问题排查与解决方法
检查实体类的Id字段配置
确认出问题的实体中,Guid类型Id字段的特性配置是否正确。如果用DataAnnotations,要确保配置如下:[Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public Guid Id { get; set; }若使用Fluent API,需在
OnModelCreating方法里做对应配置:modelBuilder.Entity<你的实体类>() .Property(e => e.Id) .HasDefaultValueSql("NEWID()") // 也可根据需求用NEWSEQUENTIALID() .ValueGeneratedOnAdd();避免因未指定Guid的生成策略,导致EF默认按int类型处理自增标识列。
清理旧迁移文件与迁移历史
仅删除数据库表无法解决问题,需先删除项目中所有旧的迁移文件,再清空或删除数据库里的__EFMigrationsHistory表。之后重新执行Add-Migration InitialCreate(或自定义迁移名称),再运行Update-Database,确保新迁移基于当前实体类的正确配置生成。检查数据库上下文的映射逻辑
查看DbContext的OnModelCreating方法,确认是否存在针对该实体Id字段的错误映射,比如误写了.HasColumnType("int")这类配置,导致EF生成迁移时将Guid转为int类型。清理项目编译缓存
若之前曾将该实体的Id字段设为int后改回Guid,可能存在编译缓存残留。可以删除项目的bin和obj文件夹,重新编译后再尝试生成迁移。
内容的提问来源于stack exchange,提问作者Jason.Net
相关产品推荐
相关产品推荐

